【发布时间】:2020-03-26 09:16:21
【问题描述】:
当我在 tf2.0 急切模式下量化张量时,我想用恒等式(直接通过估计器)进行反向传播。我能够执行前向传递,但在尝试为我的模型应用渐变以进行反向传播时遇到 ValueError: No gradients provided for any variable.. 错误。
我尝试使用自定义渐变。作为一个最小示例,请考虑以下代码:
import tensorflow as tf
@tf.custom_gradient
def quantize(x):
x = tf.cast(x, dtype=tf.uint8)
def grad(dy):
return dy
return x, grad
@tf.custom_gradient
def dequantize(x):
x = tf.cast(x, dtype=tf.float32)
def grad(dy):
return dy
return x, grad
x = tf.ones([10,10])
with tf.GradientTape() as g:
g.watch(x)
y = dequantize(quantize(x))*2
dy_dx = g.gradient(y, x)
print(dy_dx) # outputs None
渐变为无,这意味着当我在模型中使用此类函数时,我将无法进行反向传播。我应该如何解决这个问题?考虑到我需要 tf.quantize() 以外的东西,有没有更好的方法来实现量化?
另外,我使用GradientTape g的方式是根据官方教程,但我不明白为什么他们会在with范围之外使用g(最后
代码中的行)。任何澄清表示赞赏。
【问题讨论】:
-
问题解决了吗?如果没有,也许 qkeras 量化器可以帮助你:github.com/google/qkeras/blob/master/qkeras/quantizers.py
-
我在这篇文章中找到了解决方案,也许对你有帮助! stackoverflow.com/questions/36456436/…
标签: python tensorflow machine-learning tensorflow2.0 quantization