【问题标题】:No shape in pretrained Keras Inception vs demanded shapes after training预训练的 Keras Inception 中没有形状与训练后要求的形状
【发布时间】:2018-10-19 12:36:31
【问题描述】:

我正在尝试使用 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]               

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

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

感谢您的帮助,

提姆

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

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

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

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

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

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

    inceptionModel.set_weights(trainedModel.get_weights())
    

    【讨论】:

    • 谢谢你,这对我有用。是的,这就是我的意思。必须定义至少 3 个通道大小,否则不会定义每个层中必须有多少个过滤器,每个过滤器都具有共享权重。
    • 确实,我忘记评论过滤器了 :)
    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2021-07-03
    • 1970-01-01
    • 2019-07-19
    • 2019-06-06
    • 2019-10-20
    相关资源
    最近更新 更多