これは、スタック オーバーフローに関する私の最初の質問です。できるだけ多くのコンテキストを提供しようとします。私の質問を読んでくれてありがとう!
efficentnet
現在、分類問題に使用しています。中間層に補助ヘッドを追加したい。補助ヘッドとは、2 番目の出力 (2 つの最終出力) を生成するレイヤーの別のセットを意味します。
現在、次のコードを使用して、モデルの最後に頭を追加することができました。
inputs = tf.keras.Input(shape=(img_size, img_size, 3), name='input')
x = efn.EfficientNetB7(input_shape=(img_size, img_size, 3), include_top=False)(inputs)
classification_head = tf.keras.layers.GlobalAveragePooling2D()(x)
classification_head = tf.keras.layers.Dense(4, activation='softmax', name = 'classification')(classification_head)
aux_head = tf.keras.layers.Conv2D(128, kernel_size = 3, padding='same')(x)
aux_head = tf.keras.layers.BatchNormalization()(aux_head)
aux_head = tf.keras.layers.ReLU()(aux_head)
aux_head = tf.keras.layers.Conv2D(1, kernel_size=1, padding= 'valid', name = 'aux_head')(aux_head)
model = tf.keras.Model(inputs, [classification_head,aux_head])
同様の手順を実行したいのですがaux_head
、中間層 (ここでは という名前block5a_expand_conv
) に直接追加することで、私が試したのは次のとおりです。
inputs = tf.keras.Input(shape=(img_size, img_size, 3), name='input')
x = efn.EfficientNetB7(input_shape=(img_size, img_size, 3), include_top=False)(inputs)
classification_head = tf.keras.layers.GlobalAveragePooling2D()(x)
classification_head = tf.keras.layers.Dense(4, activation='softmax', name = 'classification')(classification_head)
intermediary_layer = x(
input_shape=(img_sisze, img_sisze, 3),
include_top=False).get_layer(name = 'block5a_expand_conv')
aux_head = tf.keras.layers.Conv2D(128, kernel_size = 3, padding='same')(intermediary_layer.output)
aux_head = tf.keras.layers.BatchNormalization()(aux_head)
aux_head = tf.keras.layers.ReLU()(aux_head)
aux_head = tf.keras.layers.Conv2D(1, kernel_size=1, padding= 'valid', name = 'aux_head')(aux_head)
model = tf.keras.Model(inputs, [classification_head,aux_head])
しかし、このコードは次の名前のエラーを生成します。
Graph disconnected
ここで何ができるかについて誰かが考えを持っていますか?