我想使用 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 倍。有没有办法加快速度?
最佳答案
运行这个sess.run(tf.local_variables_initializer())
,adam中有局部变量,需要初始化它们
关于python - TensorFlow 无法将 apply_gradients 与 AdamOptimizer 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766298/