首页 > 解决方案 > 我应该使用 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

所以,我不知道我应该使用哪一层。请尝试在此线程中帮助我。

标签: pythontensorflowmachine-learningtf.keras

解决方案


可以使用,include_top=False因为最后 3 层(对于该特定模型)是完全连接的层,通常不是好的特征向量。如果模型直接输出一个特征向量,那么就不需要了。

大多数人使用最后一层进行迁移学习,但这可能取决于您的应用程序。例如,盖蒂斯等。人。表明 VGG 的前几层对图像的风格敏感,后面的层对内容敏感。

我可能会在超参数搜索中尝试所有这些,看看哪个性能最好。如果图像相似度是指内部对象的相似度,我可能会从最后一层开始。


推荐阅读