在损失函数中结合交叉熵和mse

时间:2017-10-11 21:58:30

标签: python tensorflow keras

我正在研究回归问题。我的数据集的标签范围为[0,1]。由于设计目的,价值超过0.3的标签会转换为负数,即0.35会转换为-0.35

在keras中,我首先尝试mse作为损失函数,但性能不佳。在我意识到标签的标志后,我也尝试了二进制交叉熵。但表现仍然不佳。

正如我上面所解释的,似乎我们可以利用两个损失函数并总结它们。但我不知道如何编写代码。此外,如果您对此特定数据集有任何其他建议,请告诉我。

2 个答案:

答案 0 :(得分:2)

您可以创建自己的损失功能,结帐keras documentationsource code以获取提示,但它应该是这样的:

from keras.losses import mean_squared_error, binary_crossentropy

def my_custom_loss(y_true, y_pred):
    mse = mean_squared_error(y_true, y_pred)
    crossentropy = binary_crossentropy(y_true, y_pred)
    return mse + crossentropy

...

model.compile(loss=my_custom_loss, ...)

如果您需要基本张量操作,还要检查backend API以使用基元

答案 1 :(得分:0)

您可能想使用Keras功能api构建多输出模型。

您可以为模型的分类部分创建一个输出,为模型的回归部分创建一个输出。 (仅供参考,在文献中,它们被称为CNN的分类头和回归头。)

然后,您可以为每个输出指定损耗函数。

您还可以为每个损失函数加权(即,为每个模型输出的损失的线性组合设置权重)。

Keras functional api guide中解释了这种类型的多输出模型。通读链接,并注意多输入和多输出模型

部分