前提・実現したいこと
kerasのVGG16のtop層をsequentialで作りなおして転移学習を行いました。
モデル作成のコードは以下のような感じです。
python
1 input_tensor = Input(shape=(img_widths, img_heights, 3)) 2 vgg16 = VGG16(include_top=False, weights='imagenet', input_tensor=input_tensor) 3 4 top_model = Sequential() 5 top_model.add(Flatten(input_shape=vgg16.output_shape[1:])) 6 top_model.add(Dense(256, activation='relu',name='fc1')) 7 top_model.add(Dropout(0.5, name='dropout1')) 8 top_model.add(Dense(256, activation='relu',name='fc2')) 9 top_model.add(Dropout(0.5, name='dropout2')) 10 top_model.add(Dense(2, activation='softmax', name='output')) 11 12 model = Model(input=vgg16.input, output=top_model(vgg16.output))
↑のモデルで学習を回した後、学習済モデルをロードしてfc2の256次元特徴量を抽出したいです。
発生している問題・エラーメッセージ
学習済モデルをloadしてlayerを一つずつ表示させると以下のようになり、上記のtop_model.addで作ったレイヤーが一括でSequentialにまとめられています。
<keras.engine.input_layer.InputLayer object at 0x2ac24201b438> <keras.layers.convolutional.Conv2D object at 0x2ac24201b4a8> <keras.layers.convolutional.Conv2D object at 0x2ac24201b668> <keras.layers.pooling.MaxPooling2D object at 0x2ac24201b7f0> <keras.layers.convolutional.Conv2D object at 0x2ac24201bb38> <keras.layers.convolutional.Conv2D object at 0x2ac24201bbe0> <keras.layers.pooling.MaxPooling2D object at 0x2ac24201bd68> <keras.layers.convolutional.Conv2D object at 0x2ac24201bef0> <keras.layers.convolutional.Conv2D object at 0x2ac242037160> <keras.layers.convolutional.Conv2D object at 0x2ac2420372e8> <keras.layers.pooling.MaxPooling2D object at 0x2ac242037470> <keras.layers.convolutional.Conv2D object at 0x2ac242037518> <keras.layers.convolutional.Conv2D object at 0x2ac2420376a0> <keras.layers.convolutional.Conv2D object at 0x2ac242037828> <keras.layers.pooling.MaxPooling2D object at 0x2ac2420379b0> <keras.layers.convolutional.Conv2D object at 0x2ac242037a58> <keras.layers.convolutional.Conv2D object at 0x2ac242037be0> <keras.layers.convolutional.Conv2D object at 0x2ac242037d68> <keras.layers.pooling.MaxPooling2D object at 0x2ac242037ef0> <keras.engine.sequential.Sequential object at 0x2ac24201bf98>
試したこと
Sequential内のfc2層を抽出したくて
model.get_layer('fc2').output
をモデルのoutputにしようとしたのですが、modelにfc2というレイヤーはないとエラーが返されてしまいます。
Sequential作成後、コンパイルしたモデルではSequential内のレイヤーを抽出することはできないのでしょうか…?
補足情報(FW/ツールのバージョンなど)
python 3.7.3
keras 2.2.4
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。