Keras - 从一个神经网络进行两个预测



我正在尝试组合由同一网络生成的两个输出,该网络对 4 类任务和 10 类任务进行预测。然后,我希望将这些输出组合在一起,以给出一个长度为 14 的数组,我将其用作我的最终目标。

虽然这似乎很有效,但预测总是针对一个类,因此它会产生一个概率距离,该概率距离只涉及从 14 个选项中选择 1 个而不是 2。我实际需要做的是提供 2 个预测,每个类一个。我希望这一切都由相同的模型生产。

input = Input(shape=(100, 100), name='input')
lstm = LSTM(128, input_shape=(100, 100)))(input)
output1 = Dense(len(4), activation='softmax', name='output1')(lstm)
output2 = Dense(len(10), activation='softmax', name='output2')(lstm)
output3 = concatenate([output1, output2])
model = Model(inputs=[input], outputs=[output3])

我在这里的问题是确定适当的损失函数和预测方法?对于预测,我可以简单地在softmax之后抓取每一层的输出,但是我不确定如何为要训练的每一件事设置损失函数。

有什么想法吗?

多谢

您不需要连接输出,您的模型可以有两个输出:

input = Input(shape=(100, 100), name='input')
lstm = LSTM(128, input_shape=(100, 100)))(input)
output1 = Dense(len(4), activation='softmax', name='output1')(lstm)
output2 = Dense(len(10), activation='softmax', name='output2')(lstm)
model = Model(inputs=[input], outputs=[output1, output2])

然后,为了训练此模型,通常使用两个加权的损失来产生单个损失:

model.compile(optimizer='sgd', loss=['categorical_crossentropy', 
'categorical_crossentropy'], loss_weights=[0.2, 0.8])

只需确保正确格式化数据,因为现在每个输入样本对应于两个输出标记样本。有关更多信息,请查看函数式 API 指南。

最新更新