当用作预训练特征提取器时,VGG16 应该提取多少特征?
Posted
技术标签:
【中文标题】当用作预训练特征提取器时,VGG16 应该提取多少特征?【英文标题】:How many features is VGG16 supposed to extract when used as a pre-trained feature extractor? 【发布时间】:2019-11-14 12:16:23 【问题描述】:我正在使用带有 TensorFlow 后端的 Keras,通过预训练模型(ImageNet 上的 VGG16)从图像中提取特征。从我可以在线阅读的内容来看,我应该为每张图像获取一个具有 4096 个特征的向量。
我正在使用这条线来导入没有最后一个全连接层的模型(我相信我应该这样做):
applications.vgg16.VGG16(weights='imagenet', include_top=False, pooling='avg'
但是,我最终得到的向量只有 512 个特征。考虑 VGG16 的架构:
看起来我实际上是从最后一个最大池化层获得结果(这与 Keras 文档一致)。
那么我应该获得 512 或 4096 个特征吗?
【问题讨论】:
【参考方案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()
以获得更全面的了解。
【讨论】:
以上是关于当用作预训练特征提取器时,VGG16 应该提取多少特征?的主要内容,如果未能解决你的问题,请参考以下文章