最初のベースでVGG16ネットワークを使用してシーケンシャルモデルを作成しました。次に例を示します。
from keras.applications import VGG16
conv_base = VGG16(weights='imagenet',
# do not include the top, fully-connected Dense layers
include_top=False,
input_shape=(150, 150, 3))
from keras import models
from keras import layers
model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
# the 3 corresponds to the three output classes
model.add(layers.Dense(3, activation='sigmoid'))
私のモデルは次のようになります。
model.summary()
Layer (type) Output Shape Param # ================================================================= vgg16 (Model) (None, 4, 4, 512) 14714688 _________________________________________________________________ flatten_1 (Flatten) (None, 8192) 0 _________________________________________________________________ dense_7 (Dense) (None, 256) 2097408 _________________________________________________________________ dense_8 (Dense) (None, 3) 771 ================================================================= Total params: 16,812,867 Trainable params: 16,812,867 Non-trainable params: 0 _________________________________________________________________
次に、ネットワークのvgg16モデル部分に関連付けられているレイヤー名を取得します。つまり何かのようなもの:
layer_name = 'block3_conv1'
filter_index = 0
layer_output = model.get_layer(layer_name).output
loss = K.mean(layer_output[:, :, :, filter_index])
ただし、vgg16畳み込みはモデルとして表示され、レイヤーは公開されていないため、エラーが発生します。
ValueError:そのようなレイヤーはありません:block3_conv1
どうすればいいですか?
重要なのは、最初にModelオブジェクトで_.get_layer
_を実行し、次に特定のvgg16レイヤーを指定して別の_.get_layer
_を実行し、THEN do .outputを実行することです。
layer_output = model.get_layer('vgg16').get_layer('block3_conv1').output
VGG16インスタンスからレイヤーの名前を取得するには、次のコードを使用します。
for layer in conv_base.layers:
print(layer.name)
名前はモデル内で同じでなければなりません。これを示すには、次のことができます。
print([layer.name for layer in model.get_layer('vgg16').layers])
ライアンが見せてくれたように。 vgg16レイヤーを呼び出すには、最初にget_layerメソッドを使用してモデルから呼び出す必要があります。
さらに使用するために、リストにレイヤーの名前を保存するだけです
layer_name=[]
for layer in base_model.layers:
print(layer.name)
layer_name.append(layer.name)