在多输出keras模型中计算损耗时,y_pred和y_true是多少?

时间:2018-01-21 05:56:46

标签: python keras keras-layer

我目前有一个多输出模型

model=Model(inputs=x1, outputs=[y1,y2])
model.compile((optimizer='sgd', loss=[cutom_loss,'mse'])

此处y_pred丢失函数的y_truemse值是多少? y_true的{​​{1}}是多少;是单独输出y2还是同时输出y1和y2?

在我的mse我需要从两个输出中传递y_true和y_pred以进行计算

custom_loss

我该怎么做?

1 个答案:

答案 0 :(得分:1)

很遗憾,您无法定义全球'损失功能。 A loss function is always computed only on one output(参见接受答案中的伪代码)。

在您的示例中,自定义丢失将在y1_true和y1_pred上计算,而mse将在y2_true和y2_pred上计算。

如果您想要包含y1和y2输出的自定义丢失,我可以想到两种方式:

  1. 在一个输出中折叠多个输出:如果y1和y2是相似的向量,则可以连接它们以便只有一个输出。然后在您的自定义丢失中,您应用一些索引/切片以分隔两个输出。
  2. 将损失作为模型的输出:创建自定义网络图 (使用keras功能API和后端)计算损失, 通过将y1_true和y2_true作为网络的输入;通过做 那,你的最终模型将有3个输出; y1_pred,y2_pred和 失利。培训结束后,您可以丢弃模型的一部分 不再感兴趣(y_true输入和损失输出)。
  3. 我记得我过去遇到过类似的问题而且我选择实施选项2,但这有点痛苦。