Keras bietet eine Möglichkeit, die Funktionen eines vorab trainierten Modells zu extrahieren, die hier beschrieben werden. Https://keras.io/applications/
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np
model = VGG16(weights='imagenet', include_top=False)
img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
features = model.predict(x)
Ich habe dies mit einigen Beispielbildern versucht. Mein Vektor x hat die Form (100, 3, 224, 224) für 100 Beobachtungen, 3 für RGB und eine Pixelgröße von 224 x 224. das preprocess_input
formt dies für das VGG-Modell um (es erwartet eine andere Reihenfolge).
Die Ausgabeform von features
ist jedoch (100, 512, 7, 7). Was ist das für eine Form? Ich möchte die Funktionen als Eingabe für eine logistische Regression verwenden. Ich brauche also eine Form wie (100, n): eine Zeile für jede Beobachtung und die Merkmale in den Spalten. Wie kann ich die Ausgabe in diese Dimension umformen?
Angenommen, ich möchte jetzt mein eigenes einfaches Convnet erstellen:
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
model = Sequential()
model.add(Convolution2D(32, 3, 3, input_shape=(1, 299, 299)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
Dieses Modell erwartet Graustufenbilder als Eingabe, daher die Form.
Welche Art von Ebene muss ich hinzufügen, um Funktionen dieses Modells zu erhalten (etwas, das ich in eine logistische Regression oder eine zufällige Gesamtstruktur eingeben kann).
Vielen Dank