1

一个问题关于与多个输出keras回归:Keras回归多个输出

你能解释一下beteween这个网的区别:

两个输入 - >两个输出

input = Input(shape=(2,), name='bla') 
hidden = Dense(hidden, activation='tanh', name='bla')(input) 
output = Dense(2, activation='tanh', name='bla')(hidden) 

和:两个单输入 - >两个单输出:

input = Input(shape=(2,), name='speed_input') 
hidden = Dense(hidden_dim, activation='tanh', name='hidden')(input) 
output = Dense(1, activation='tanh', name='bla')(hidden) 

input_2 = Input(shape=(1,), name='angle_input') 
hidden_2 = Dense(hidden_dim, activation='tanh', name='hidden')(input_2) 
output_2 = Dense(1, activation='tanh', name='bla')(hidden_2) 

model = Model(inputs=[speed_input, angle_input], outputs=[speed_output, angle_output]) 

它们的行为非常相似。其他时候,我完全把它们分开,那么这两个网就像他们应该做的那样。

这是正常的,两个单输出网的行为比两个输出的更大的一个更容易理解,我不认为差异可能是巨大的,就像我经历过的。

非常感谢:)

回答

1

这可以追溯到神经网络如何操作。在你的第一个模型中,每个隐藏的神经元接收2个输入值(因为它是一个'密集'层,输入传播到每个神经元)。在您的第二个模型中,您的神经元数量是其的两倍,但其中每个只接收speed_inputangle_input,并且仅适用于该数据而不是整个数据。因此,如果speed_inputangle_input是2个完全不相关的属性,那么您可能会看到分裂2个模型的更好性能,因为神经元没有接收基本上是噪声输入的内容(他们不知道您的输出是否对应到您的输入,他们只能尝试优化您的损失功能)。基本上,你正在创建2个独立的模型。

但是在大多数情况下,您想要提供组合在一起绘制预测的模型相关属性。因此,拆分模型是没有意义的,因为你只是剥离了必要的信息。

+0

非常感谢您抽出宝贵时间:) So Keras在第二个例子中完全分离了这两个网络吗?两个独立建构和学习网(两种不同的脚本)和这个选项之间的区别在哪里? – Asdf11

+0

要回答你的第一个问题,不,不是。这两个网络仍然在同一个模型对象中,但在计算上它们完全不相关。 –

+0

有2个不同的模型对象的区别是,现在你必须在同一时间和相同数量的例子进行训练。一方面,这有点不方便。但让我们说,如果你的问题总是需要两个网络的输出,你可以通过训练和并排运行来节省时间和内存。 –