Pytorch入门> 2.0自动求导

自动求导流程

pytorch中自动求导比较简单,不需要用计算图。主要就是写公式,反向传播,求导。

#1.定义变量
x = torch.range(1,5)
x.requires_grad = True
#2.定义函数
y = 2*x
#3.反向传播
y.sum().backward()
#4.求导
x.grad


#5.清零
x.grad.zero_()
#6.另一个计算
y1 = x*x
#7.反向传播
y1.sum().backward()
#8.求导
x.grad

运行结果:

Pytorch入门> 2.0自动求导_第1张图片(1)定义变量

此处注意tensor需要是浮点数类型,在示例中使用torch.range()而不是torch.arange()就是这一原因。

通过.require_grad = True声明这是一个变量。

(2)定义函数 只需要按照公式打出就可以。

(3)反向传播

要求是一个标量,若直接使用y.backward()会报错:grad can be implicitly created only for scalar outputs。这一问题的解决方法就是先使用.sum()再反向传播。

(4)求导

对谁求导直接使用.grad。注意没有括号。

(5)清零

主要解决梯度累积的问题。为不影响后面的计算要对变量梯度清零。下图展示对变量不梯度清零则之前的梯度就会累积。

Pytorch入门> 2.0自动求导_第2张图片

 

你可能感兴趣的:(Pytorch,pytorch,python)