当用作预训练特征提取器时,VGG16应该提取多少个特征?

时间:2019-07-03 18:49:58

标签: python tensorflow keras

我将TensorFlow后端与Keras结合使用,以使用经过预先训练的模型(ImageNet上的VGG16)从图像中提取特征。从我可以在线阅读的内容中,我应该为每个图像获得具有4096个特征的向量。

我正在使用此行来导入没有最后一个完全连接的层的模型(据我所想):

applications.vgg16.VGG16(weights='imagenet', include_top=False, pooling='avg'

但是,最后我得到的向量只有512个特征。考虑VGG16的体系结构:

VGG16's architecture

看来我实际上是从最后一个最大池化层中获得结果的(这与Keras文档一致)。

那么我应该获得512或4096个功能吗?

1 个答案:

答案 0 :(得分:1)

根据Keras documentation,当您设置include_top = False时,它会忽略最后3个完全连接(FC)层,因此从直观上来说,您应该获得正确的512个特征向量。如果要考虑最后3个FC层,请设置include_top = True。然后,您将获得1000个特征预测(考虑最后的softmax层)。

尝试执行:

vggmodel = keras.applications.vgg16.VGG16(weights='imagenet', include_top=False, pooling='avg')
vggmodel.summary()

vggmodel = keras.applications.vgg16.VGG16(weights='imagenet', include_top=True, pooling='avg') 
vggmodel.summary()

以获得更全面的了解。