def huber_loss(infer, label, epsilon, layer_name):
"""
Args:
infer
label
epsilon
layer_name
"""
with tf.variable_scope(layer_name):
abs_diff = tf.abs(tf.sub(infer, label));
index = tf.to_int32(abs_diff <= epsilon, name = 'partition_index')
l1_part, l2_part = tf.dynamic_partition(abs_diff, index, 2)
#l1_loss = tf.reduce_mean(l1_part, name = 'l1_loss')
#l2_loss = tf.reduce_mean(tf.square(l2_part), name = 'l2_loss')
l1_part_loss = epsilon * (l1_part - 0.5 * epsilon)
l2_part_loss = 0.5 * tf.square(l2_part)
hloss = tf.reduce_mean(tf.concat(0, [l1_part_loss,l2_part_loss]),
name = 'huber_loss_sum')
return hloss
评论列表
文章目录