python - Keras 回归多输出

标签 python tensorflow neural-network artificial-intelligence keras

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

你能解释一下这个网络之间的区别吗:

两个输入 -> 两个输出

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_inputangle_input,并且只处理该数据而不是整个数据。

因此,如果 speed_inputangle_input 是 2 个完全不相关的属性,那么拆分这两个模型可能会获得更好的性能,因为神经元不会接收到基本上是噪声输入(他们不知道你的输出对应于你的输入,他们只能尝试优化你的损失函数)。本质上,您正在创建 2 个独立的模型。

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

关于python - Keras 回归多输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45583425/

相关文章:

python - 在python中查找并替换多个值

python - 将 unicode 转换为日期时间格式

python - Python多重处理启动进程,但只有一个处于事件状态

tensorflow - 我们如何将 .pth 模型转换为 .pb 文件?

c++ - 如何在没有 ARM 处理器的 Linux 上安装 TensorflowLite C++?

python - 神经网络分类

machine-learning - 前馈神经网络中的输入排列

python - 监控数据库相关事件的最佳实践

python - 从 tflite 模型文件中提取标签

matlab - 如何解释多输出神经网络回归结束时获得的回归图?