首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是一个好的损失函数来惩罚大小和符号差异

什么是一个好的损失函数来惩罚大小和符号差异
EN

Stack Overflow用户
提问于 2018-06-06 10:39:53
回答 1查看 2.3K关注 0票数 16

我所处的情况是,我需要训练一个模型来预测标量值,重要的是使预测值与真实值的方向相同,同时平方误差最小。

什么样的损失函数才是好的选择呢?

例如:

假设预测值为- 1,真实值为1。尽管(3,1)和(-1,1)的平方误差相等,但两者之间的损失应该比3和1之间的损失大得多。

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-02-01 16:57:59

据我所知,你目前的损失函数类似于:

loss = mean_square_error(y, y_pred)

你可以做的,是在你的损失中添加另一个组件,这是一个惩罚负数的组件,对正数不做任何事情。你可以选择一个系数来表示你想惩罚它的程度。为此,我们可以像使用负数形状的ReLU一样使用。如下所示:

让我们对这个组件调用"Neg_ReLU“。然后,你的损失函数将是:

loss = mean_squared_error(y, y_pred) + Neg_ReLU(y_pred)

例如,如果结果为-1,则总误差为:

mean_squared_error(1, -1) + 1

如果你的结果是3,那么总的误差是:

mean_squared_error(1, -1) + 0

(参见上面函数中的Neg_ReLU(3) = 0和Neg_ReLU(- 1 ) =1。

如果你想惩罚更多的负值,那么你可以添加一个系数:

coeff_negative_value = 2

loss = mean_squared_error(y, y_pred) + coeff_negative_value * Neg_ReLU

现在,负值更受惩罚。

我们可以这样构建ReLU负函数:

tf.nn.relu(tf.math.negative(value))

所以总而言之,最终你的总损失将是:

代码语言:javascript
复制
coeff = 1

Neg_ReLU = tf.nn.relu(tf.math.negative(y))

total_loss = mean_squared_error(y, y_pred) + coeff * Neg_ReLU
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50711530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档