【发布时间】: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函数的图:
我注意到当你连接你的模型大小比添加层时更大。是否是串联的情况,您只需将前一层的权重堆叠在一起,然后使用Add() 将这些值加在一起?
看起来应该更复杂,但我不确定。
【问题讨论】:
标签: tensorflow keras deep-learning neural-network