【问题标题】:Keras: output of concatenation has no parameters?Keras:连接的输出没有参数?
【发布时间】:2020-05-10 05:14:14
【问题描述】:

tf.keras.Concatenate() 方法遇到了一个奇怪的问题。我试图执行组卷积。这是代码。

# C2: (None, 27, 27, 96) -> (None, 27, 27, 256).

# Split (None, 27, 27, 96) into x2 (None, 27, 27, 48)
pool1_1 = Lambda(lambda x: x[:, :, :, :48])(pool1)
pool1_2 = Lambda(lambda x: x[:, :, :, 48:])(pool1)  

#####################
# Grouped convolution.
#####################
conv2_1 =  Conv2D(filters=128,
                     kernel_size=(5,5),
                     activation='relu',
                     padding='same',
                     name='conv2_1')(pool1_1)

conv2_2 =  Conv2D(filters=128,
                     kernel_size=(5,5),
                     activation='relu',
                     padding='same',
                     name='conv2_2')(pool1_2)

conv2 = Concatenate(name='conv2', axis=-1)([conv2_1, conv2_2])

这里是output

如您所见,在连接之后,结果层的参数为 0。我希望它有 153728 * 2 个参数。这是为什么呢?

【问题讨论】:

    标签: keras deep-learning computer-vision conv-neural-network tensorflow2.0


    【解决方案1】:

    Concatenate 层没有参数,因为它们没有任何可学习的权重,操作只是连接,根本没有在该层进行学习。

    所以你假设层必须有参数是错误的。

    【讨论】:

    • 好的,谢谢!有什么解决方法吗?问题是,我真的需要为合并层设置参数。
    • @FerdinandMom 解决方法是什么意思?这个层的参数会做什么?会学到什么?
    • 事情是,我正在尝试将权重从 caffe 模型加载到 keras 模型。在 caffe 模型中,该层的权重形状为 (5, 5, 48, 256)。如果我进行连接,我必须为 2 个卷积指定 128 个过滤器。但是,我将无法为这 2 层加载权重,因为它们将有 128 个过滤器而不是 256 个。所以我唯一的解决方案是将权重加载到合并层。问题:合并层没有参数。
    • @FerdinandMom 首先,您在这里有一个明确的 XY 问题,您问的是您认为解决方案是什么,而不是询问实际问题。其次,解决这个问题的方法不是“让 Concatenate 有参数”,而只是拆分你拥有的权重并将它们加载到单独的 Conv2D 层中。
    • 感谢您的解决方案。我应该将帖子的标题更改为“Keras:连接的输出没有参数?”
    猜你喜欢
    • 2019-12-23
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多