【问题标题】:Uninitialized Value Error when using AdamOptimizer使用 AdamOptimizer 时出现未初始化值错误
【发布时间】:2017-05-20 19:22:36
【问题描述】:

我试图在 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]})

我得到 FailedPreconditionError 在 a1 上与 sess.run():

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 时没有任何问题。
如果有人指出我的示例可能有什么问题,那将是一个很大的帮助。

提前非常感谢
马丁

【问题讨论】:

    标签: python-2.7 tensorflow gradient


    【解决方案1】:

    你需要打电话

    sess.run(tf.global_variables_initializer())
    

    之后(不是之前)

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

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

    【讨论】:

    • 感谢您的帮助。确实,我需要在调用 sess.run(tf.global_variables_initializer()) 之前定义所有操作
    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 2016-08-19
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多