减少keras中预训练模式权重的输出特征数量

时间:2019-01-29 05:32:29

标签: python 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)

1 个答案:

答案 0 :(得分:0)

该模型经过训练,可以在2048维空间中为分类器生成嵌入。除非您组合了非常复杂和不灵活的模型,否则尝试减小嵌入空间的尺寸是没有意义的。如果您只是在没有内存限制的情况下进行简单的转移学习,则只需将新的分类器(额外的层)捕捉在其之上,然后在冻结(或不冻结)原始Xception中的所有层之后进行重新训练。无论Xception output_shape如何,它都应该起作用。参见keras docs

也就是说,如果您真的需要将维数减小到1000-d,则将需要一种方法来保留(或至少尝试保留)嵌入空间的原始拓扑,否则您的模型将根本无法从中受益转移学习。看一下PCASVDT-SNE