首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从EfficientNet Tensorflow中提取特征

从EfficientNet Tensorflow中提取特征
EN

Stack Overflow用户
提问于 2020-07-24 05:17:16
回答 1查看 1K关注 0票数 1

我有一个用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”层。以下先前的层已被访问,没有问题:[]“

有什么办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-24 08:31:29

对不起,是我的错。我只需在efficientnet层之后添加一个GlobalAveragePooling2D层,就可以提取权重并继续:)

仅供参考:

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63063260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档