似乎您可以通过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,但它甚至不存在)
答案 0 :(得分:1)
f(x) = abs(x)
外, x=0
在任何地方都是可区分的。它的衍生物等于:
所以唯一的问题是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/