python - 从 EfficientNet Tensorflow 中提取特征
问题描述
我有一个使用 EfficientNetB6 训练的 CNN 模型。我的任务是通过移除最后一个密集层来提取这个训练模型的特征,然后使用这些权重来训练一个提升模型。我之前使用 Pytorch 做到了这一点,并且能够从我感兴趣的层中提取权重,并在我的验证集上进行预测,然后进行提升。
我现在在张量流中这样做,但目前卡住了。下面是我的模型结构,我尝试使用网站上的代码,但没有任何运气。
我想删除最后一个密集层并使用剩余层预测验证集。
我尝试使用:
layer_name = 'efficientnet-b6' intermediate_layer_model = tf.keras.Model(inputs = model.input, outputs = model.get_layer(layer_name).output)
但我收到错误“ValueError: Graph disconnected: cannot get value for tensor Tensor("input_1:0", shape=(None, 760, 760, 3), dtype=float32) at layer "input_1". 以下之前的图层访问没有问题:[]”
有什么办法可以解决这个问题?
解决方案
对不起这是我的错。我只是在高效网络层之后添加了一个 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
推荐阅读
- python-3.x - 无法读取/写入 BLE 中的特性
- php - base64_encode 和 convert.base64-encode 之间的 PHP 结果不同
- html - 站点地图生成器仅找到一页
- javascript - Firestore (javascript sdk) - 只获取新数据(不只是添加)
- python - 模拟 glob 的问题不需要 for 循环
- android - 如何在运行时从共享首选项更改 Retrofit baseUrl
- asp.net-identity - 如何获取 IdentityServer4 本身的自定义声明
- android - 'by viewModels()' Kotlin 属性委托未解析的引用
- reactjs - 反应嵌套路由仅适用于链接
- linux - 面临 rhel 6.4 上的绑定问题