我应使用VGG19的哪一层提取特征

时间:2019-07-06 05:53:12

标签: python tensorflow machine-learning tf.keras

现在,我想要图像特征来计算它们的相似度。我们可以在张量流中使用预训练的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

所以,我不知道应该使用哪一层。请尝试在此主题中为我提供帮助。

1 个答案:

答案 0 :(得分:0)

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

大多数人将最后一层用于迁移学习,但这可能取决于您的应用程序。例如,Gatys et. al.显示VGG的前几层对图像样式敏感,而后几层对内容敏感。

我可能会在超参数搜索中尝试所有它们,然后看看哪一个提供最佳性能。如果用图像相似性来表示包含在其中的对象的相似性,那么我可能会从最后一层开始。