Keras中模型合并的意义是什么?

数据挖掘 喀拉斯
2021-09-18 05:07:59

我了解到 Keras 具有根据以下内容“合并”两个模型的功能:

from keras.layers import Merge

left_branch = Sequential()
left_branch.add(Dense(32, input_dim=784))

right_branch = Sequential()
right_branch.add(Dense(32, input_dim=784))

merged = Merge([left_branch, right_branch], mode='concat')

mergint NN 的意义何在,它在哪些情况下有用?它是一种集成建模吗?在性能方面,几种“模式”(concat、avg、dot 等)有什么区别?

1个回答

使用它有几个原因,基本上它用于将多个网络连接在一起。一个很好的例子是您有两种类型的输入,例如标签和图像。您可以构建一个网络,例如:

IMAGE -> Conv -> Max Pooling -> Conv -> Max Pooling -> Dense

TAG -> 嵌入 -> 密集层

要将这些网络组合成一个预测并将它们一起训练,您可以在最终分类之前合并这些密集层。

有多个输入的网络是它们最“明显”的用法,这是一张在 RNN 中将单词与图像组合在一起的图片,多模态部分是两个输入合并的地方:

多模态神经网络

另一个例子是谷歌的 Inception 层,你有不同的卷积,这些卷积在进入下一层之前被重新加在一起。

要将多个输入提供给 Keras,您可以传递一个数组列表。在单词/图像示例中,您将有两个列表:

x_input_image = [image1, image2, image3]
x_input_word = ['Feline', 'Dog', 'TV']
y_output = [1, 0, 0]

然后你可以适应如下:

model.fit(x=[x_input_image, x_input_word], y=y_output]