首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GradientTape不计算梯度

GradientTape不计算梯度
EN

Data Science用户
提问于 2020-06-01 13:07:20
回答 1查看 94关注 0票数 2

我理解,只要我在tf.GradientTape()上下文中定义一个计算,梯度磁带就会计算出计算输出所依赖的所有变量。但是,我认为我并没有完全理解梯度的子属性,因为下面的代码没有像我期望的那样执行:

代码语言:javascript
运行
复制
import tensorflow as tf
x = tf.Variable(2.)
loss_ = x**2-2*x+1
with tf.GradientTape(persistent=True) as g:
    loss = loss_*1
print(g.gradient(loss,x))
output: None

为什么不计算梯度wrt?

我只能计算wrt到上下文中显式使用的变量的梯度。例如,以下代码也不计算梯度:

代码语言:javascript
运行
复制
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
x = tf.Variable(2.)
t1 = x**2
t2 = -2*x
t3 = 1.
with tf.GradientTape(persistent=True) as g:
    loss = t1+t2+t3
print(g.gradient(loss,x))
EN

回答 1

Data Science用户

发布于 2020-06-01 14:31:05

由于您试图计算\partial loss \over \partial x,所以需要在GradientTape的作用域中执行从xloss的所有操作,以便它能够监视它们。

代码语言:javascript
运行
复制
x = tf.Variable(2.)

with tf.GradientTape(persistent=True) as g:
    loss_ = x**2-2*x+1
    loss = loss_*1

print(g.gradient(loss,x))
# Will output: tf.Tensor(2.0, shape=(), dtype=float32)
票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/75226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档