【问题标题】:Add vs Concatenate layer in Keras在 Keras 中添加 vs 连接层
【发布时间】:2022-01-20 19:34:14
【问题描述】:

我正在研究一些不同的神经网络架构,并尝试拼凑如何自己重新创建它们。

我遇到的一个问题是 Keras 中 Concatenate()Add() 层之间的功能差异。看起来他们完成了类似的事情(将多个层组合在一起),但我不太明白两者之间的真正区别。

这是一个示例 keras 模型,它接受两个单独的输入,然后将它们组合起来:

inputs1 = Input(shape = (32, 32, 3))
inputs2 = Input(shape = (32, 32, 3))
x1      = Conv2D(kernel_size = 24, strides = 1, filters = 64, padding = "same")(inputs1)
x1      = BatchNormalization()(x1)
x1      = ReLU()(x1)
x1      = Conv2D(kernel_size = 24, strides = 1, filters = 64, padding = "same")(x1)

x2      = Conv2D(kernel_size = 24, strides = 1, filters = 64, padding = "same")(inputs2)
x2      = BatchNormalization()(x2)
x2      = ReLU()(x2)
x2      = Conv2D(kernel_size = 24, strides = 1, filters = 64, padding = "same")(x2)
add     = Concatenate()([x1, x2])
out     = Flatten()(add)
out     = Dense(24, activation = 'softmax')(out)
out     = Dense(10, activation = 'softmax')(out)
out     = Flatten()(out)
mod     = Model([inputs1, inputs2], out)

我可以用Concatenate() 层替换Add() 层,一切正常,模型似乎相似,但我很难理解其中的区别。

供参考,下面是每个使用keras的plot_model函数的图:

带有附加层的 KERAS 模型:

具有级联层的 KERAS 模型:

我注意到当你连接你的模型大小比添加层时更大。是否是串联的情况,您只需将前一层的权重堆叠在一起,然后使用Add() 将这些值加在一起?

看起来应该更复杂,但我不确定。

【问题讨论】:

    标签: tensorflow keras deep-learning neural-network


    【解决方案1】:

    正如您所说,它们都结合了输入,但它们结合的方式不同。 他们的名字已经暗示了他们的用法

    Add() 输入相加,
    例如(假设 batch_size=1)

    x1 = [[0, 1, 2]]
    x2 = [[3, 4, 5]]
    x = Add()([x1, x2])
    

    那么 x 应该是 [[3, 5, 7]],其中添加了每个元素
    注意输入shape是(1, 3)和(1, 3),输出也是(1, 3)

    Concatenate() 连接输出,
    例如(假设 batch_size=1)

    x1 = [[0, 1, 2]]
    x2 = [[3, 4, 5]]
    x = Concatenate()([x1, x2])
    

    那么 x 应该是 [[0, 1, 2, 3, 4, 5]],其中输入水平堆叠在一起,
    注意输入shape是(1, 3)和(1, 3),输出也是(1, 6),

    即使张量有更多维度,类似的行为仍然适用。

    出于一个明显的原因,Concatenate 创建了一个更大的模型,输出大小只是所有输入总和的大小,而 add 与其中一个输入具有相同的大小


    有关添加/连接以及组合多个输入的其他方式的更多信息,请参阅this

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2019-08-21
      • 2020-05-29
      • 2020-03-28
      • 2017-08-29
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多