Python 在Tensorflow 2.0中使用GradientTape()和jacobian()时出错
我正在使用Python中Tensorflow 2.0中的GradientTape()和jacobian() 此代码执行良好:Python 在Tensorflow 2.0中使用GradientTape()和jacobian()时出错,python,tensorflow,deep-learning,tensorflow2.0,gradienttape,Python,Tensorflow,Deep Learning,Tensorflow2.0,Gradienttape,我正在使用Python中Tensorflow 2.0中的GradientTape()和jacobian() 此代码执行良好: x = tf.Variable(2.0, dtype=tf.float32) with tf.GradientTape() as gT: gT.watch(x) g = tf.convert_to_tensor([x, 0.0], dtype=tf.float32) dg = gT.jacobian(g, x) 但这一准则打破了: x = tf.Vari
x = tf.Variable(2.0, dtype=tf.float32)
with tf.GradientTape() as gT:
gT.watch(x)
g = tf.convert_to_tensor([x, 0.0], dtype=tf.float32)
dg = gT.jacobian(g, x)
但这一准则打破了:
x = tf.Variable(2.0, dtype=tf.float32)
with tf.GradientTape() as gT:
gT.watch(x)
gv = tf.Variable([x, 0.0], dtype=tf.float32)
g = tf.convert_to_tensor(gv , dtype=tf.float32)
dg = gT.jacobian(g, x)
并抛出错误:
InvalidArgumentError:必须为数据类型为int32的占位符张量“loop\u body/placeholder”提供一个值
[[node loop_body/Placeholder(定义于…Anaconda3\lib\site packages\tensorflow_core\python\framework\ops.py:1751)]][Op:[u推断\u f_995]
模块中的回溯(最近一次调用)ipython-input-32-686c8a0d6e954 gv=tf.Variable([x,0.0],dtype=tf.float32)
5g=tf.convert_to_tensor(gv,dtype=tf.float32)
---->6dg=gT.雅可比矩阵(g,x)
为什么第一个代码有效,而第二个代码无效?原因很简单 在第一个例子中,您得到
g=tf.convert_to_tensor([x,0.0],dtype=tf.float32)
而computedg/dx
和g
与x
有直接关系,工作正常
但在第二个例子中
gv = tf.Variable([x, 0.0], dtype=tf.float32)
g = tf.convert_to_tensor(gv , dtype=tf.float32)
g
和x
之间不再有任何联系,因为当你打电话时
gv=tf.Variable([x,0.0],dtype=tf.float32)
它只是复制x
中的值,并且不带对x
的引用,因此无法获得导数dg/dx
。但是如果你尝试一下dg/d(gv)它会奏效的
PS:但是我没有收到错误(对于您的第二个示例)。我只得到了无