TensorFlow不能将apply_gradients与AdamOptimizer

时间:2017-08-18 23:40:49

标签: python machine-learning tensorflow

我想使用AdamOptimizer,但我也希望每一步都能编辑渐变。

典型用法如下:

train_step = tf.train.AdamOptimizer(learning_rate).minimize(loss)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
sess.run(train_step, feed_dict=feed_dict)

这适用于AdamOptimizer的单个训练步骤。

我想在每一步修改渐变,所以我提取它们并使用以下代码重新插入它们:

opt = tf.train.AdamOptimizer(learning_rate=1e-3)
grads_and_vars = opt.compute_gradients(loss)
train_opt = opt.apply_gradients(grads_and_vars)
sess.run(train_opt, feed_dict=feed_dict)

我通常会对grads_and_vars应用一些操作,但我只是想让它首先运行。由于以下错误,以前的代码在sess.run(train_opt, feed_dict=feed_dict)处失败:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value beta1_power_1
     [[Node: beta1_power_1/read = Identity[T=DT_FLOAT, _class=["loc:@Variable"], _device="/job:localhost/replica:0/task:0/cpu:0"](beta1_power_1)]]

train_opt = opt.apply_gradients(grads_and_vars)引起,但我没有正确应用渐变吗?

GradientDescentOptimizer 没有错误,因此我知道这必须是提取渐变的正确方法,然后将其重新插入训练步骤。

我有什么遗失的东西吗?我如何以这种方式使用AdamOptimizer?

编辑:我提到第二个代码块与GradientDescentOptimizer一起使用,但它比第一个代码慢大约10倍。有没有办法加快速度?

1 个答案:

答案 0 :(得分:1)

运行此sess.run(tf.local_variables_initializer()),adam中有局部变量,您需要初始化它们