Kerasには、事前トレーニングされたモデルの機能を抽出する方法があります。ここで説明します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)
いくつかのサンプル画像でこれを試しました。私のベクトルxは、100回の観測で形状(100、3、224、224)、RGBで3、ピクセルサイズが224x224です。はpreprocess_input
VGGモデルのこれを再形成します(別の順序を想定しています)。
ただし、の出力形状features
は(100、512、7、7)です。この形は何ですか?これらの機能をロジスティック回帰の入力として使用したい。したがって、(100、n)のような形状が必要です。観測ごとに1行と列の特徴です。出力をこの次元に再形成するにはどうすればよいですか?
今、自分のシンプルなConvnetを構築したいとします。
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)))
このモデルは、入力としてグレースケール画像、つまり形状を想定しています。
このモデルの機能(ロジスティック回帰またはランダムフォレストに入力できるもの)を取得するには、どのようなレイヤーを追加する必要がありますか?
ありがとう