tf.fake_quant_with_min_max_vars是一个微分函数吗?

时间:2018-10-14 21:14:08

标签: tensorflow neural-network quantization

量化方案通常是不可微的,因为它们会通过阈值,例如舍入或正负号函数。这意味着由于链式规则的性质,我们无法获得可训练变量的梯度。

相反,我们可以使用称为'straight-through-estimator'的技巧,使我们可以反向传播各个可训练变量的梯度。

一种这样的方法是 tf.fake_quant_with_min_max_vars ,这种格式的优点是可以表示任意大小的范围,它们不必对称,可以表示有符号和无符号值, BlogPaper

所以,我的问题是,我们可以区分fake_quant函数吗?如果是这样,此函数是否适用“直接估算器”?

我用一些代码片段做了一些

  

x = tf.cast(np.random.normal(0,1,(10,10),tf.float32)

     

x_q = tf.fake_quant_with_min_max_vars(x,min = tf.reduce_min(x),max = tf.reduce_max(x),num_bits = 3)

     

grad = tf.gradients(x_q,x)

在那种情况下,几乎每个grad的值都为1(即渐变1),这意味着它会通过渐变本身。

但是,有时一些样本的梯度为0或其他常数,例如2、3、4 ...

我想念发生了什么事吗?

0 个答案:

没有答案