TensorFlow如何处理L1正则化的差异?

时间:2017-01-07 07:11:58

标签: tensorflow

似乎您可以通过tf.abs()声明成本函数,然后将其传递给自动渐变生成(请参阅https://github.com/nfmcclure/tensorflow_cookbook/blob/master/03_Linear_Regression/04_Loss_Functions_in_Linear_Regressions/04_lin_reg_l1_vs_l2.py

。但是我们知道abs()是不可区分的。

这在Tensorflow中是如何完成的?它只是在[-1,1]中随机抛出一个数字吗?

如果有人可以请我指出那个很棒的实施方案。谢谢!

(我在git中查找tensorflow.py,但它甚至不存在)

2 个答案:

答案 0 :(得分:1)

f(x) = abs(x)外,

x=0在任何地方都是可区分的。它的衍生物等于:

abs derivative

所以唯一的问题是tensorflow如何在x=0实现派生。您可以手动检查:

import tensorflow as tf
x = tf.Variable(0.0)
y = tf.abs(x)
grad = tf.gradients(y, [x])[0]
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(grad))

打印0.0

答案 1 :(得分:0)

修改后的版本,基于@standy 的回答。 你可以自己修改函数:

import tensorflow as tf
x = tf.Variable(0.0)
y = tf.where(tf.greater(x, 0), x+2, 2)  # The piecewise-defined function here is:y=2 (x<0), y=x+2 (x>=0)
grad = tf.gradients(y, [x])[0]
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(grad))

我会推荐我的一篇文章,使用 echarts 可视化 L1 和 L2 正则化: https://simzhou.com/en/posts/2021/cross-entropy-loss-visualized/