[英]object is not callable, when using tf.optimizers.Adam.minimize()
[英]ValueError: No gradients provided for any variable when using tf.optimizers.Adam.minimize method
我正在尝试使用这些代码行与旧版本的 Tensorflow (在 ML 在线课程上看到)做的事情
optimizer = tf.train.AdamOptimizer(learning_rate)
train_step = optimiser.minimize(loss)
并检查以前回答的问题和文档,我发现var_list
现在是一个必需的参数,如果loss
作为张量提供,则必须提供计算损失的磁带。 所以我必须编写以下代码:
optimizer = tf.optimizers.Adam(learning_rate=learning_rate)
params = [w1, b1, w2, b2, w3, b3]
gradients = optimizer.get_gradients(loss=loss, params=params)
train_step = optimizer.minimize(loss=loss, var_list=params, tape=tf.GradientTape(), grad_loss=gradients)
但我仍然收到错误:
ValueError: No gradients provided for any variable: (['Variable:0', 'Variable_1:0',
'Variable_8:0', 'Variable_9:0', 'Variable_12:0', 'Variable_13:0'],). Provided
`grads_and_vars` is ((None, <tf.Variable 'Variable:0' shape=(784, 512) dtype=float32>),
(None, <tf.Variable 'Variable_1:0' shape=(512,) dtype=float32>), (None, <tf.Variable
'Variable_8:0' shape=(512, 64) dtype=float32>), (None, <tf.Variable 'Variable_9:0'
shape=(64,) dtype=float32>), (None, <tf.Variable 'Variable_12:0' shape=(64, 10)
dtype=float32>), (None, <tf.Variable 'Variable_13:0' shape=(10,) dtype=float32>)).
我以为我会解决使用get_gradients
方法计算梯度并将其作为grad_loss
参数提供的问题,但它仍然不起作用。 我什至不完全确定我应该提供所有这六个参数,但我正在使用的神经网络的架构实际上由两个隐藏层和一个 output 层组成,每个层都有权重和偏差。
非常感谢你提前
一个可能的解决方案是简单地使用以前版本的 Tensorflow:
首先我需要以这种方式初始化(我使用 tf1 因为对于其他功能或方法我更喜欢使用更新版本,这意味着我还将import tensorflow as tf
)
import tensorflow.compat.v1 as tf1
tf.compat.v1.disable_eager_execution()
tf1.disable_v2_behavior()
然后代码是
optimizer = tf1.train.AdamOptimizer(learning_rate)
train_step = optimizer.minimize(loss=loss)
所以我正在使用旧的AdamOptimizer
。
但是,如果有人知道如何使用最新版本的 Tensorflow 做同样的事情,我会非常高兴知道。 谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.