tf.clip_by_value(
t,
clip_value_min,
clip_value_max,
name=None
)
tf.clip_by_value()的作用是将t中小于某个数的值置为clip_value_min,将大于某个数的值置为clip_value_max。但是官网api介绍并没有讲它的导数如何处理。
如果将其加到神经网络中进行训练,按照一般的理解,比如我的tensor是t=[-1, 0, 0.5, 1, 1.5]这5个数,tf.clip_by_value(t, 0, 1),此时1这个值是刚好满足要求,不需要反传导数,1.5这个值已经是“很”满足要求,就更不需要反传导数了。我以为是这样。。。
然而实验表明并不是这样,在前向传播中1.5被置为了1,在反向传播中该位置会反传一个能将1.5逐渐迭代到1的导数,这是需要注意的一点