Python Keras回归多输出

Python Keras回归多输出,python,tensorflow,neural-network,artificial-intelligence,keras,Python,Tensorflow,Neural Network,Artificial Intelligence,Keras,关于具有多个输出的keras回归的一个问题: 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_

关于具有多个输出的keras回归的一个问题:

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])
你能解释一下这张网的区别吗:

两个输入->两个输出

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])
他们的行为非常相似。另一方面,当我将它们完全分开时,这两个网络的行为就像它们应该的那样

两个单输出网络的行为比一个更大的有两个输出的网络更容易理解,这是正常的吗?我不认为这种差异会像我所经历的那样巨大


非常感谢:)

这又回到了神经网络的运作方式。在第一个模型中,每个隐藏神经元接收2个输入值(因为它是一个“密集”层,输入传播到每个神经元)。在第二个模型中,神经元的数量是原来的两倍,但每个神经元只接收
速度输入
角度输入
,并且只处理该数据,而不是整个数据

因此,如果
speed\u input
angle\u input
是两个完全不相关的属性,那么分割这两个模型可能会获得更好的性能,因为神经元没有接收到基本上是噪声输入的东西(它们不知道你的输出与你的输入相对应,它们只能尝试优化你的损失函数)。基本上,您正在创建两个独立的模型


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

非常感谢您花时间:)那么Keras在第二个示例中完全分隔了这两个网络?两个独立构建和学习的网络(在两个不同的脚本中)与此选项之间的区别在哪里?回答您的第一个问题,不,不是真的。两个网络仍然在同一个模型对象中,但在计算上它们完全不相关。拥有两个不同的模型对象的区别在于,现在您必须同时使用相同数量的示例来训练它们。一方面,这有点不方便。但是假设你的问题总是需要两个网络的输出,你可以通过让它们并排训练和运行来节省时间和内存。