[英]Combine cross-entropy and mse in loss function
我正在研究回归问题。 我的数据集的标签范围为[0,1]
。 由于设计目的,数值超过0.3
的标签转为负数,即0.35
转为-0.35
。
在keras中,我第一次尝试mse
作为损失函数,但是性能不好。 在我意识到标签的符号后,我也尝试了二元交叉熵。 但是性能还是不行。
正如我上面所解释的,似乎我们可以利用两个损失函数并将它们相加。 但是不知道怎么写代码。 此外,如果您对此特定数据集有任何其他建议,请告诉我。
您可以创建自己的损失函数,查看keras 文档和 源代码以获得想法,但它应该是这样的:
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, ...)
如果您需要基本的张量操作,还可以查看后端 API以使用原语
您可能想要使用 Keras 函数式 api 来构建多输出模型。
您可以为模型的分类部分创建一个输出,为模型的回归部分创建一个输出。 (仅供参考,在文献中这些被称为 CNN 的分类头和回归头。)
然后您可以为每个输出指定损失函数。
您还可以对每个损失函数进行加权(即为每个模型输出的损失的线性组合设置权重)。
这种类型的多输出模型在Keras 功能 api 指南中进行了解释。 通读链接,注意多输入多输出模型部分
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.