python - TensorFlow 无法将 apply_gradients 与 AdamOptimizer 一起使用

标签 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 倍。有没有办法加快速度?

最佳答案

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

关于python - TensorFlow 无法将 apply_gradients 与 AdamOptimizer 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766298/

相关文章:

numpy - 应该增加哪些参数来指示函数的方差?

python - Keras:期望 3 维,但得到具有形状的数组 - 密集模型

debugging - 有没有办法将 Tensorflow 中的中间输出保存到文件中?

tensorflow - 寻找全局最小值

python - Makefile 无法运行源命令

python - 标签预测的特征空间缩减

python - 有条件的 pandas groupby

python - struct.unpack 6 个字节为short 和int 失败。为什么?

Python-sklearn.MLPClassifier : How to obtain output of the first hidden layer

python - 文件系统方案 '[local]' 未在 Google Colab TPU 中实现