web-dev-qa-db-ja.com

keras:あるモデル出力を別のモデル入力として使用します

InceptionResNetV2モデル(事前トレーニング済み)の前に高密度レイヤーを追加していますこれはInceptionResNetV2出力です

model_base = InceptionResNetV2(include_top=True, weights='imagenet')
x = model_base.get_layer('avg_pool').output
x = Dense(3, activation='softmax')(x)

これがレイヤーが追加されます

input1 = Input(shape=input_shape1)
pre1 = Conv2D(filters=3, kernel_size=(5, 5), padding='SAME', 
input_shape=input_shape1, name='first_dense')(input1)
pre = Model(inputs=input1, outputs=pre1)

これは2つのモデルを組み合わせています

 after = Model(inputs=pre.output, outputs=x)

 model = Model(inputs=input1, outputs=after.output)

 model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])

使用する

pre.output

なので

after.input

しかし、それは動作しません。どうすれば解決できますか?

10
cwzat cwzat

以前の出力を取得したいので、まずmodel_baseから新しいモデルを作成します。

あなたのコード:

model_base = InceptionResNetV2(include_top=True, weights='imagenet')
x = model_base.get_layer('avg_pool').output
x = Dense(3, activation='softmax')(x)

新着 model_base

model_base = Model(model_base.input, x)

ここで、出力を渡すことが重要ですpre1このモデルへ:

base_out = model_base(pre1)     

それでおしまい:

model = Model(input1, base_out)
13
Daniel Möller