gpt4 book ai didi

neural-network - 如何在 Tensorflow 中结合 tf.absolute 和 tf.square 来创建 Huber 损失函数?

转载 作者:行者123 更新时间:2023-12-04 14:56:12 24 4
gpt4 key购买 nike

准确地说,我要找的损失函数是绝对误差小于0.5时的平方误差,当绝对误差大于0.5时就是绝对误差本身。这样,误差函数的梯度不会超过 1,因为一旦平方误差函数的梯度达到 1,绝对误差函数就会起作用,并且梯度保持恒定为 1。我在下面包含了我当前的实现.出于某种原因,它给了我比平方误差更差的性能。

fn_choice_maker1 = (tf.to_int32(tf.sign(y - y_ + 0.5)) + 1)/2
fn_choice_maker2 = (tf.to_int32(tf.sign(y_ - y + 0.5)) + 1)/2
choice_maker_sqr = tf.to_float(tf.mul(fn_choice_maker1, fn_choice_maker2))

sqr_contrib = tf.mul(choice_maker_sqr, tf.square(y - y_))
abs_contrib = tf.abs(y - y_)-0.25 - tf.mul(choice_maker_sqr, tf.abs(y - y_)-0.25)
loss = tf.reduce_mean(sqr_contrib + abs_contrib)
train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
choice_maker_sqr是一个列张量,当误差在 0.5 到 -0.5 之间时为 1。这些名字是不言自明的。

最佳答案

这是我对 Huber loss function 的实现在python tensorflow 中:

def huber_loss(y_true, y_pred, max_grad=1.):
"""Calculates the huber loss.

Parameters
----------
y_true: np.array, tf.Tensor
Target value.
y_pred: np.array, tf.Tensor
Predicted value.
max_grad: float, optional
Positive floating point value. Represents the maximum possible
gradient magnitude.

Returns
-------
tf.Tensor
The huber loss.
"""
err = tf.abs(y_true - y_pred, name='abs')
mg = tf.constant(max_grad, name='max_grad')
lin = mg*(err-.5*mg)
quad=.5*err*err
return tf.where(err < mg, quad, lin)

关于neural-network - 如何在 Tensorflow 中结合 tf.absolute 和 tf.square 来创建 Huber 损失函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39106732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com