我将TensorFlow后端与Keras结合使用,以使用经过预先训练的模型(ImageNet上的VGG16)从图像中提取特征。从我可以在线阅读的内容中,我应该为每个图像获得具有4096个特征的向量。
我正在使用此行来导入没有最后一个完全连接的层的模型(据我所想):
applications.vgg16.VGG16(weights='imagenet', include_top=False, pooling='avg'
但是,最后我得到的向量只有512个特征。考虑VGG16的体系结构:
看来我实际上是从最后一个最大池化层中获得结果的(这与Keras文档一致)。
那么我应该获得512或4096个功能吗?
答案 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()
以获得更全面的了解。