【发布时间】:2018-01-13 17:48:30
【问题描述】:
在下面的简单代码中,梯度得到正确计算。
import tensorflow as tf
x = tf.constant([1, 2, 3, 4], dtype=tf.float32)
y = tf.Variable(tf.ones_like(x), dtype=tf.float32)
y = 2*x
grad = tf.gradients(y, x)
ini = tf.global_variables_initializer()
with tf.Session() as ses:
ses.run(ini)
print(ses.run(grad))
正如预期的那样,结果是[array([ 2., 2., 2., 2.], dtype=float32)]。
尝试使用 tf.assign 进行函数计算时遇到问题。以下代码:
import tensorflow as tf
x = tf.constant([1, 2, 3, 4], dtype=tf.float32)
y = tf.Variable(tf.ones_like(x), dtype=tf.float32)
func = tf.assign(y, 2*x)
grad = tf.gradients(y, x)
ini = tf.global_variables_initializer()
with tf.Session() as ses:
ses.run(ini)
ses.run(func)
print(ses.run(grad))
... 产生错误:
TypeError: Fetch argument None 的类型无效
<class 'NoneType'>。
为什么会这样? x 和 y 节点之间的连接是否通过 tf.assign 操作“丢失”了?
【问题讨论】:
标签: python tensorflow graph autograd