这是我关于堆栈溢出的第一个问题。我将尝试提供尽可能多的背景信息。感谢您花时间阅读我的问题!
我目前正在efficentnet
用于分类问题。我想在中间层上添加一个辅助头。辅助头是指另一组将产生第二个输出(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
有没有人知道在这里可以做什么工作?