我正在回归问题。我的数据集的标签范围从[0,1]
。由于设计目的,价值超过0.3
的标签被转换为负值,即0.35
转换为-0.35
。结合交叉熵和mse损失函数
在凯拉斯,我第一次尝试mse
作为损失函数,但表现并不好。在我意识到标签的标志后,我也尝试了二元交叉熵。但表现依然不佳。
正如我上面所解释的,似乎我们可以利用两个损失函数并将它们相加。但我不知道如何编写代码。此外,如果您对此特定数据集有任何其他建议,请让我知道。
我正在回归问题。我的数据集的标签范围从[0,1]
。由于设计目的,价值超过0.3
的标签被转换为负值,即0.35
转换为-0.35
。结合交叉熵和mse损失函数
在凯拉斯,我第一次尝试mse
作为损失函数,但表现并不好。在我意识到标签的标志后,我也尝试了二元交叉熵。但表现依然不佳。
正如我上面所解释的,似乎我们可以利用两个损失函数并将它们相加。但我不知道如何编写代码。此外,如果您对此特定数据集有任何其他建议,请让我知道。
您可以创建自己的损失函数,结账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如果您需要基本的张量操作中使用的原语
有一个错误:'TypeError:custom_loss()只需要2个参数(给出3个)'。我编译模型为''model.compile(optimizer ='adam',loss = self.custom_loss,metrics = ['mse'])' – Wedoso
'self'是第三个参数,这就是为什么给你一个错误 –
你是否尝试了平均绝对误差(mae)?而且,二叉交叉熵用于分类问题,而不是回归问题。 – semicolon
@semicolon在过去几天我试过DNN。我关注的性能指标是符号精度。当然,预测值也很重要。采用'mse'和DNN结构,当前符号精度为81.5%。我试着用'mae'作为丢失函数和相同DNN结构的建议。标志准确率为81.7%。下面Julio给出的答案几乎是我想要的,尽管提出了一个错误。实际上,我想介绍交叉熵的原因是为了提高符号精度。 – Wedoso