pytorch自动求梯度autograd

autograd是pytorch构建神经网络的核心。

在 PyTorch 中,结合以下代码例子,当你对一个张量 x 设置 requires_grad=True 时,你实际上是告诉 PyTorch 需要跟踪所有对这个张量的操作以便未来可以计算梯度。当你调用 out.backward() 时,PyTorch 会自动计算关于 out 的梯度,并逆向传播回 x

在以下代码中:

python 复制代码
x = torch.ones(2,2)
print(x)
x.requires_grad=True
print(x)
y = x + 2
z = y*y*3
out = z.mean()
print(out)
out.backward()
print(x.grad)
print(y.grad)  # 这一行会报错,因为 y 不需要梯度,y为非叶子张量

y 是由 x 通过一个简单的加法操作得到的。由于 y 本身并没有设置 requires_grad=True,PyTorch 没有跟踪 y 的操作历史,因此无法计算 y 关于 out 的梯度。

如果你想要计算 y 的梯度,你需要在创建 y 之前也设置 requires_grad=True。但是,通常情况下,我们不需要对中间变量求梯度,我们只需要对最终输出的梯度感兴趣,然后通过反向传播计算出所有需要的梯度。

如果你确实需要对 y 求梯度,可以这样做:

python 复制代码
x = torch.ones(2,2, requires_grad=True)
y = x + 2
z = y*y*3
out = z.mean()
out.backward()
print(x.grad)  # 计算 x 的梯度
print(y.grad)  # 现在可以计算 y 的梯度了

在这个修改后的代码中,xy 都设置了 requires_grad=True,因此 PyTorch 会跟踪它们所有的操作,你可以计算 y 关于 out 的梯度。但是请注意,通常情况下,我们只需要计算最终输出(在这个例子中是 out)关于输入变量(在这个例子中是 x)的梯度。

相关推荐
Billy_Zuo7 小时前
人工智能机器学习——决策树、异常检测、主成分分析(PCA)
人工智能·决策树·机器学习
君名余曰正则10 小时前
机器学习06——支持向量机(SVM核心思想与求解、核函数、软间隔与正则化、支持向量回归、核方法)
人工智能·机器学习·支持向量机
sjr200110 小时前
从huggingface下载模型时有哪些文件?
人工智能·机器学习
moz与京10 小时前
【面试向】热门技术话题(上)
人工智能·物联网·机器学习·面试·web3·区块链·元宇宙
君名余曰正则12 小时前
【竞赛系列】机器学习实操项目08——全球城市计算AI挑战赛(数据可视化分析)
人工智能·机器学习·信息可视化
F_D_Z12 小时前
【PyTorch】单对象分割
人工智能·pytorch·python·深度学习·机器学习
猫天意13 小时前
【CVPR2023】奔跑而非行走:追求更高FLOPS以实现更快神经网络
人工智能·深度学习·神经网络·算法·机器学习·卷积神经网络
AI风老师13 小时前
深度学习入门:打好数学与机器学习基础,迈向AI进阶之路
人工智能·深度学习·机器学习
BFT白芙堂14 小时前
清华大学联合项目 论文解读 | MoTo赋能双臂机器人:实现零样本移动操作
机器学习·机器人·移动机器人·论文解读·具身智能·双臂机器人·cobotmagic
禁默14 小时前
机器学习的发展与应用:从理论到现实
人工智能·机器学习