首页 > 解决方案 > 减少keras中预训练模式权重的输出特征数

问题描述

我想使用预训练的 Xception 模型提取 1000 个图像特征。但是 xception 模型最后一层(avg_pool)给出了 2048 个特征。我可以在不进行额外培训的情况下减少最终输出特征数吗?我想要 softmax 之前的图像特征而不是预测结果。

base_model = xception.Xception(include_top=True, weights='imagenet')    
base_model.summary()
self.model = Model(inputs = base_model.input, outputs=base_model.get_layer('avg_pool').output)

标签: pythonkeras

解决方案


该模型经过训练,可以在 2048 维空间中生成嵌入到之后的分类器。尝试降低嵌入空间的维数是没有意义的,除非您正在组合非常复杂且不灵活的模型。如果您只是在没有内存限制的情况下进行简单的迁移学习,只需将您的新分类器(额外的层)放在它上面,并在冻结(或不冻结)原始 Xception 中的所有层后重新训练。无论Xception output_shape如何,这都应该有效。请参阅keras 文档

也就是说,如果您真的需要将维度降低到 1000 维,您将需要一种方法来保留(或至少尝试保留)嵌入空间的原始拓扑,否则您的模型将不会从迁移学习中受益。看看PCASVDT-SNE


推荐阅读