python - 我应该使用 VGG19 的哪一层来提取特征
问题描述
现在,我想要图像的特征来计算它们的相似性。我们可以在 tensorflow 中使用预训练的 VGG19 模型轻松获得特征。但是 VGG19 模型有很多层,我不知道应该使用哪一层来获取特征。哪一层的输出适合这个问题?
# I think this how is correct to extract feature
model = tf.keras.application.VGG19(include_top=True,
weight='imagenet')
input = model.input
output = model.layers[-2].output
extract_model = tf.keras.Model(input, output)
我的推断是越接近最后的输出,模型输出的功能就越强大。但有些教程说“用于include_top=False
提取特征”(例如 Image Captioning with Attention TensorFlow)
所以,我不知道我应该使用哪一层。请尝试在此线程中帮助我。
解决方案
可以使用,include_top=False
因为最后 3 层(对于该特定模型)是完全连接的层,通常不是好的特征向量。如果模型直接输出一个特征向量,那么就不需要了。
大多数人使用最后一层进行迁移学习,但这可能取决于您的应用程序。例如,盖蒂斯等。人。表明 VGG 的前几层对图像的风格敏感,后面的层对内容敏感。
我可能会在超参数搜索中尝试所有这些,看看哪个性能最好。如果图像相似度是指内部对象的相似度,我可能会从最后一层开始。
推荐阅读
- python - 在python中带有“不再显示此消息”的QMessageBox
- html - 填写 HTML 登录表单并下载数据
- amazon-web-services - Spark Scala EMR 作业无法从 S3 下载文件
- r - 更改优势比图上 y 轴标签的顺序
- angular - 执行完所有for循环后执行代码
- docker - 如何使用状态管理设置 dapr 和 docker compose
- r - 更新反应性闪亮数据
- micronaut - 使用 Maven 和 Micronaut 框架构建原生镜像
- asp.net-core - 就绪探测和健康检查有什么好处?
- firefox - Firefox 禁用自定义工具栏选项或密码保护它