Keras 中的多任务学习

数据挖掘 机器学习 神经网络 深度学习 喀拉斯 多任务学习
2021-10-11 01:50:22

我正在尝试在 Keras 中实现共享层。我确实看到 Keras 有keras.layers.concatenate,但我不确定文档中关于它的使用。我可以用它来创建多个共享层吗?使用 Keras 实现如下所示的简单共享神经网络的最佳方法是什么?共享神经网络

请注意,所有 3 个 NN 的输入、输出和共享层的所有形状都是相同的。三个 NN 中有多个共享层(和非共享层)。彩色层对于每个 NN 都是唯一的,并且具有相同的形状。

基本上,该图表示具有多个共享隐藏层的 3 个相同的 NN,然后是多个非共享隐藏层。

我不确定如何像 Twitter 示例中那样共享多个层,只有一个共享层(API 文档中的示例)。

1个回答

通过使用功能 API,您可以轻松地在网络的不同部分之间共享权重。在您的情况下,我们有一个Input x这是我们的输入,然后我们将有一个Dense名为 shared 的层。然后我们将有三个不同的Dense层,称为 sub1、sub2 和 sub3,然后是三个输出层,称为 out1、out2 和 out3。

x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
sub3 = Dense(16)(shared)
out1 = Dense(1)(sub1)
out2 = Dense(1)(sub2)
out3 = Dense(1)(sub3)

我们现在可以像这样定义我们的模型:

model = Model(inputs=x, outputs=[out1, out2, out3])

它现在需要一个包含三个元素的元组/列表,每个输出一个。

您可以通过这些概念走得更远。假设我们想学习个人层的各个权重,但仍然希望对输出层的线性组合具有相同的权重,我们可以通过这样做来实现:

out = Dense(1)
out1 = out(sub1)
out2 = out(sub2)
out3 = out(sub3)

编辑:连接基本上与您想要做的相反,它将网络不同部分的(中间)输出粘贴到新层中。你实际上想分成多个不同的部分。