我有一个用EfficientNetB6训练的CNN模型。我的任务是通过删除最后一个密集层来提取这个训练模型的特征,然后使用这些权重来训练一个boosting模型。我之前使用Pytorch做到了这一点,并且能够从我感兴趣的层中提取权重,并在我的验证集上预测,然后增强。
我现在在tensorflow中做这件事,但目前卡住了。下面是我的模型结构,我试着在网站上使用代码,但没有任何运气。
我想删除最后一个密集层,并使用剩余的层对验证集进行预测。
我尝试使用:
layer_name = 'efficientnet-b6‘intermediate_layer_model =tf.keras.Model(输入= model.input,输出= model.get_layer(layer_name).output)
但我得到一个错误“ValueError:图形断开连接:无法获取张量张量的值(”input_1:0“,shape=(None,760,760,3),dtype=float32)在"input_1”层。以下先前的层已被访问,没有问题:[]“
有什么办法解决这个问题吗?
发布于 2020-07-24 08:31:29
对不起,是我的错。我只需在efficientnet层之后添加一个GlobalAveragePooling2D层,就可以提取权重并继续:)
仅供参考:
def build_model(dim=CFG['net_size'], ef=0):
inp = tf.keras.layers.Input(shape=(dim,dim,3))
base = EFNS[ef](input_shape=(dim,dim,3),weights='imagenet',include_top=False)
x = base(inp)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = tf.keras.layers.Dense(1,activation='sigmoid')(x)
model = tf.keras.Model(inputs=inp,outputs=x)
opt = tf.keras.optimizers.Adam(learning_rate=0.001)
loss = tf.keras.losses.BinaryCrossentropy(label_smoothing=0.05)
model.compile(optimizer=CFG['optimizer'],loss=loss,metrics=[tf.keras.metrics.AUC(name='auc')])
print(model.summary())
return model
https://stackoverflow.com/questions/63063260
复制相似问题