深度学习-pytorch自动求导实现
Posted cc街道办事处
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习-pytorch自动求导实现相关的知识,希望对你有一定的参考价值。
import torch
x=torch.arange(4.0)
print(x)
x.requires_grad_(True)#把梯度放在哪个地方
print(x.grad)
y=2*torch.dot(x,x)#内积×2
print(y)
# 通过调用反向传播函数来自动计算y关于x每个分量的梯度
y.backward()#求导
x.grad
print(x.grad==4*x)
#在默认情况下,pytorch会累计梯度,我们需要清楚之前的值
x.grad.zero_()#_表示重写
y=x.sum()#引入另一个函数,求向量的sum,梯度等于全1
y.backward()#
print(x.grad)
#对非标量调用‘backward’需要传入一个‘gradient’参数
x.grad.zero_()
y=x*x
#等价于y.backward(torch.ones(len(x))
y.sum().backward()
print(x.grad)
#把某些计算移动到记录的计算图以外
x.grad.zero_()
y=x*x
u=y.detach()#把y看作一个常数
z=u*x
z.sum().backward()
print(x.grad==u)
x.grad.zero_()
y.sum().backward()
print(x.grad==2*x)
#即时构建函数的计算图需要通过python控制流,我们仍然可以计算得到的变量的梯度
def f(a):
b=a*2
while b.norm()<1000:
b=b*2
if b.sum()>0:
c=b
else:
c=100*b
return c
a=torch.randn(size=(),requires_grad=True)
d=f(a)
d.backward()
print(a.grad==d/a)
以上是关于深度学习-pytorch自动求导实现的主要内容,如果未能解决你的问题,请参考以下文章
深度之眼PyTorch训练营第二期 ---基础数据结构-张量
Pytorch使用pytorch进行张量计算自动求导和神经网络构建
(d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记前言(介绍各种机器学习问题)以及数据操作预备知识Ⅱ(线性代数微分自动求导)