如何将辅助头添加到预训练的 keras 模型的中间层?

问题描述

这是我关于堆栈溢出的第一个问题。我将尝试提供尽可能多的上下文。感谢您花时间阅读我的问题!

我目前正在使用 efficentnet 解决分类问题。我想在中间层上添加一个辅助头。辅助头是指将产生第二个输出(2 个最终输出)的另一组层。

目前我设法使用以下代码在模型末尾添加了一个额外的头:

inputs = tf.keras.Input(shape=(img_size,img_size,3),name='input')
    
x =  efn.EfficientNetB7(input_shape=(img_size,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,name='input')
    
x = efn.EfficientNetB7(input_shape=(img_size,name = 'classification')(classification_head)
    
intermediary_layer = x(
                input_shape=(img_sisze,img_sisze,include_top=False).get_layer(name = 'block5a_expand_conv')

aux_head = tf.keras.layers.Conv2D(128,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,aux_head])

但是这段代码产生了一个名为:

的错误
Graph disconnected

有没有人知道这里可以做什么工作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)