我所处的情况是,我需要训练一个模型来预测标量值,重要的是使预测值与真实值的方向相同,同时平方误差最小。
什么样的损失函数才是好的选择呢?
例如:
假设预测值为- 1,真实值为1。尽管(3,1)和(-1,1)的平方误差相等,但两者之间的损失应该比3和1之间的损失大得多。
非常感谢!
发布于 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))
所以总而言之,最终你的总损失将是:
coeff = 1
Neg_ReLU = tf.nn.relu(tf.math.negative(y))
total_loss = mean_squared_error(y, y_pred) + coeff * Neg_ReLU
https://stackoverflow.com/questions/50711530
复制相似问题