首页 > 解决方案 > 预训练的 Keras Inception 中没有形状与训练后要求的形状

问题描述

我正在尝试使用 Keras InceptionV3() 使用Lucid Toolkit ( https://github.com/tensorflow/lucid ) 执行特征可视化。

当我在训练后检查网络内层的形状时,它们具有给定的形状:

================================================================================
input_1 (InputLayer)            (None, 300, 400, 3)  0                                            
__________________________________________________________________________________________________
conv2d_1 (Conv2D)               (None, 149, 199, 32) 864         input_1[0][0]                    
__________________________________________________________________________________________________
batch_normalization_1 (BatchNor (None, 149, 199, 32) 96          conv2d_1[0][0]                   
__________________________________________________________________________________________________
activation_1 (Activation)       (None, 149, 199, 32) 0           batch_normalization_1[0][0]      
__________________________________________________________________________________________________
conv2d_2 (Conv2D)               (None, 147, 197, 32) 9216        activation_1[0][0]               

...

相比之下,具有预训练 imageNet-weights 的模型没有这样的限制:

input_1 (InputLayer)            (None, None, None, 3 0                                            
__________________________________________________________________________________________________
conv2d_1 (Conv2D)               (None, None, None, 3 864         input_1[0][0]                    
__________________________________________________________________________________________________
batch_normalization_1 (BatchNor (None, None, None, 3 96          conv2d_1[0][0]                   
__________________________________________________________________________________________________
activation_1 (Activation)       (None, None, None, 3 0           batch_normalization_1[0][0]      
__________________________________________________________________________________________________
conv2d_2 (Conv2D)               (None, None, None, 3 9216        activation_1[0][0]               

所以,问题是,当我想执行可视化时,使用预训练的网络它可以工作,但我的却不行。

有谁知道,为什么对层的形状没有限制,因为至少每个卷积层中的过滤器数量应该有。

谢谢你的帮助,

蒂姆

标签: pythontensorflowkerasdeep-learning

解决方案


图像的大小不会以任何方式影响卷积模型的权重。(例如,这会导致 Flatten 图层出现问题)。当然,过滤器的数量必须保持不变,否则你确实会改变权重。

过滤器是“图像层”,而不是“图像大小”。小图像产生小的过滤层,大图像产生大的过滤层。

要为可变图像大小创建 Keras Inception 模型,您必须将输入形状定义为(None, None, 3).

inceptionModel = keras.applications.inception_v3(...,input_shape=(None,None,3),....)

您可以通过转移使用训练模型中的权重(如果您以某种方式对其进行了训练):

inceptionModel.set_weights(trainedModel.get_weights())

推荐阅读