'_UnreadVariable' 对象在尝试 运行 keras 优化器时没有属性 'run'

'_UnreadVariable' object has no attribute 'run' when trying to run keras optimizer

我正在尝试 运行 tf.keras.optimizers.Optimizer 页面中的示例代码。当我尝试 运行 时出现以下错误。

AttributeError: '_UnreadVariable' object has no attribute 'run'

以下是我正在尝试的代码 运行。

import tensorflow as tf

var1 = tf.Variable(0.0)
var2 = tf.Variable(0.0)


opt = tf.keras.optimizers.SGD(learning_rate=0.1)
loss = lambda: 3 * var1 * var1 + 2 * var2 * var2
opt_op = opt.minimize(loss, var_list=[var1, var2])
opt_op.run()

这是我对此的看法:

import tensorflow as tf

var1 = tf.Variable(0.0)
var2 = tf.Variable(0.0)
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
loss = lambda: 3 * var1 * var1 + 2 * var2 * var2
#loss_fn = lambda: f(var1, var2)
# init vals
print("Initial values:",some_fn(var1,var2).numpy())

# this is applicable only on graph mode
#opt_op = opt.minimize(loss, var_list=[var1, var2])
#opt_op.run()
# however, just call this in eager mode
opt.minimize(loss, var_list=[var1, var2])

opt.variables()

Colab 笔记本:tensorflow_optimizer_Whosebug_q1.ipynb

运行:

参考:tf.keras.optimizers.Optimizer

一个很好的例子可以让你明白:tensorflow optimizer v2


更新:

什么时候应该在 TensorFlow 中使用 Eager execution?

It is imperative to use eager execution in TF when you want to evaluate operations immediately, without building graphs. TF operations return concrete values instead of constructing a computational graph to to be used and run later. Also it makes it easy to ignore all jargons and get easily started with TensorFlow and debug models.