2017-10-11 276 views
0

我正在回归问题。我的数据集的标签范围从[0,1]。由于设计目的,价值超过0.3的标签被转换为负值,即0.35转换为-0.35结合交叉熵和mse损失函数

在凯拉斯,我第一次尝试mse作为损失函数,但表现并不好。在我意识到标签的标志后,我也尝试了二元交叉熵。但表现依然不佳。

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

+0

你是否尝试了平均绝对误差(mae)?而且,二叉交叉熵用于分类问题,而不是回归问题。 – semicolon

+0

@semicolon在过去几天我试过DNN。我关注的性能指标是符号精度。当然,预测值也很重要。采用'mse'和DNN结构,当前符号精度为81.5%。我试着用'mae'作为丢失函数和相同DNN结构的建议。标志准确率为81.7%。下面Julio给出的答案几乎是我想要的,尽管提出了一个错误。实际上,我想介绍交叉熵的原因是为了提高符号精度。 – Wedoso

回答

0

您可以创建自己的损失函数,结账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如果您需要基本的张量操作中使用的原语

+0

有一个错误:'TypeError:custom_loss()只需要2个参数(给出3个)'。我编译模型为''model.compile(optimizer ='adam',loss = self.custom_loss,metrics = ['mse'])' – Wedoso

+0

'self'是第三个参数,这就是为什么给你一个错误 –