【问题标题】:Keras regression multiple outputsKeras回归多个输出
【发布时间】:2018-01-16 21:57:55
【问题描述】:

关于具有多个输出的 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])

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

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

非常感谢:)

【问题讨论】:

    标签: python tensorflow neural-network artificial-intelligence keras


    【解决方案1】:

    这可以追溯到神经网络的运作方式。在您的第一个模型中,每个隐藏神经元接收 2 个输入值(因为它是一个“密集”层,输入传播到每个神经元)。在您的第二个模型中,您的神经元数量是原来的两倍,但每个神经元只接收speed_inputangle_input,并且只使用该数据而不是整个数据。

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

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

    【讨论】:

    • 非常感谢您抽出宝贵的时间 :) 那么 Keras 在第二个示例中是否完全分离了这两个网络?两个单独构建和学习的网络(在两个不同的脚本中)和这个选项之间的区别在哪里?
    • 回答你的第一个问题,不,不是。两个网络仍然在同一个模型对象中,但在计算上它们完全不相关。
    • 拥有 2 个不同模型对象的区别在于,现在您必须同时使用相同数量的示例训练它们。一方面,这有点不方便。但是,假设您的问题总是需要两个网络的输出,您实际上可以通过让它们同时训练和运行来节省时间和内存。
    猜你喜欢
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2018-08-29
    • 2019-04-08
    • 2019-10-08
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    相关资源
    最近更新 更多