使用AdamOptimizer时未初始化的值错误

时间:2017-05-20 19:22:36

标签: python-2.7 tensorflow gradients

我试图在Tensorflow中构建一个简约的梯度计算示例。但是我总是遇到 FailedPreconditionError 错误。这就是我在做的事情:

sess = tf.Session()  
x1 = tf.placeholder(tf.float32, [None, 1], name="x1")  
x2 = tf.placeholder(tf.float32, [None, 1], name="x2")  
grad_a1_ph = tf.placeholder(tf.float32, [1], name="grad_a1_ph")  
a1 = tf.Variable(tf.ones([1]), name="a1")  
a2 = tf.Variable(tf.ones([1]), name="a2")  
sess.run(tf.global_variables_initializer())  
adam = tf.train.AdamOptimizer(learning_rate=0.01)
w = a1**2*x1**2 + a2**2*x2**2

所以我试图最小化函数w(x1,x2),它只是a1,a2,x1和x2中的二次函数,因此a1 = 0应该给出最小值。

grad_a1 = adam.compute_gradients(loss=w, var_list=[a1])

我可以在x1 = 2,x2 = 1

时计算dw / da1
x1_np = 2 * np.ones([1]).reshape(1, 1)
x2_np = 1 * np.ones([1]).reshape(1, 1)
grad_a1_buffer = sess.run(grad_a1, feed_dict={x1:x1_np, x2:x2_np})

它给出了预期的结果8.
现在我尝试使用以下代码应用我刚刚计算的渐变:

updateGrads = adam.apply_gradients(zip([grad_a1_ph],[a1]))
sess.run(updateGrads, feed_dict={grad_a1_ph:grad_a1_buffer[0][0]})

我在sess.run()行的a1上得到 FailedPreconditionError

ailedPreconditionError: Attempting to use uninitialized value beta1_power
 [[Node: beta1_power/read = Identity[T=DT_FLOAT, _class=["loc:@a1"], _device="/job:localhost/replica:0/task:0/gpu:0"](beta1_power)]]

变量 a1 肯定是初始化的,因为如果我为x1和x2提供值,我没有任何计算w或dw / da1的问题。
如果有人指出我的例子可能出错,那将是一个很大的帮助。

非常感谢提前 马丁

1 个答案:

答案 0 :(得分:0)

您需要致电

sess.run(tf.global_variables_initializer())
>之后的

adam = tf.train.AdamOptimizer(learning_rate=0.01)

或任何其他创建变量的操作。