Keras có một cách để trích xuất các tính năng của một mô hình đã được sàng lọc, được mô tả ở đây https://keras.io/appluggest/
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)
Tôi đã thử điều này với một số hình ảnh mẫu. Vectơ x của tôi có hình dạng (100, 3, 224, 224) cho 100 quan sát, 3 cho kích thước pixel RGB và 224x224. các preprocess_input
reshapes này cho mô hình VGG (dự kiến một trật tự khác nhau).
Tuy nhiên, hình dạng đầu ra features
là (100, 512, 7, 7). Hình dạng này là gì? Tôi muốn sử dụng các tính năng làm đầu vào cho hồi quy logistic. Vì vậy, tôi cần một hình dạng như (100, n): một hàng cho mỗi quan sát và các tính năng trong các cột. Làm cách nào để định hình lại đầu ra cho kích thước này?
Nói rằng bây giờ tôi muốn xây dựng Convnet đơn giản của riêng mình:
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)))
Mô hình này hy vọng hình ảnh thang độ xám là đầu vào, do đó hình dạng.
Tôi phải thêm loại lớp nào để có được các tính năng của mô hình này (thứ gì đó tôi có thể nhập vào trong hồi quy logistic hoặc rừng ngẫu nhiên).
Cảm ơn