繁体   English   中英

ValueError:使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM