質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

2713閲覧

keras Sequential内のlayerを抽出したい

sswaka

総合スコア16

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/11/06 04:18

編集2019/11/06 05:16

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

python

1model.get_layer('sequential_1').get_layer('fc2').output

上記のようにget_layerを2度重ねて使うことで
「モデル内のsequential内の各レイヤー」を取り出すコードになるようです。

投稿2019/11/06 05:56

sswaka

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

python

1model.get_layer(fc2).output

python

1model.get_layer('fc2').output

ではないでしょうか。

投稿2019/11/06 04:35

qax

総合スコア622

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sswaka

2019/11/06 04:48 編集

回答ありがとうございます。 質問にミスがあってすみません。。 model.get_layer('fc2') としても同様に No such layer :fc2 と出てしまいます (分かりにくいので質問は修正しておきます)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問