我正在研究回归问题。我的数据集的标签范围为[0,1]
。由于设计目的,价值超过0.3
的标签会转换为负数,即0.35
会转换为-0.35
。
在keras中,我首先尝试mse
作为损失函数,但性能不佳。在我意识到标签的标志后,我也尝试了二进制交叉熵。但表现仍然不佳。
正如我上面所解释的,似乎我们可以利用两个损失函数并总结它们。但我不知道如何编写代码。此外,如果您对此特定数据集有任何其他建议,请告诉我。
答案 0 :(得分:2)
您可以创建自己的损失功能,结帐keras documentation和source 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中解释了这种类型的多输出模型。通读链接,并注意多输入和多输出模型
部分