Tensorflow2: No gradients provided for any variable: 报错

在使用 TF2 的 GradientTape() 时报此类错误基本是因为 loss 和所给的变量没有联系,因此也就无法传递梯度。我的代码具体报错是因为(例子):

# 先定义一个神经网络:model
with tf.GradientTape() as tape:
	x = tf.constant([[1., 2., 3.]])
	y = model(x).numpy()
	...
	# 问题就出在上面这一步,
	# 因为我需要对'y'的取值做一些操作,所以用了.numpy()操作。
	# 继续看下一步
	loss = tf.keras.losses.mean_squared_error(y_true=xxx, y_pred=y)
grads = tape.gradient(loss, model.variables)
# 就是在上面这一步计算梯度时,和'loss'相关的是'model(x).numpy()',
# 记住这里是.numpy()而不是model输出的tensor本身,因此无法得到梯度,
# 如果print(grads)会得到None。
optimizer.apply_gradients(grads_and_vars=zip(grads, model.variables))
# 解决方案就是再另外设一个变量,y_ = y.numpy()
# 对'y_'做操作,然后在计算梯度时使用'y'。
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值