本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com
梯度自动计算是pytorch中tensor的特色,这为机器学习、深度学习训练模型时提供了极大的便利
本文通过一个具体的示例,展示如何在pytorch通过backward命令来自动计算梯度,从而避免繁杂的梯度公式
通过本文,可以了解pytorch的自动计算梯度是什么,以及如何在pytorch中实现自动计算梯度
本节先回顾传统编程中是如何实现梯度计算的
以为例,现要知道在时,x的梯度值,
传统的做法是先求出x的梯度公式,再按梯度公式计算x的梯度值
计算过程如下:
由
可知
因此,在传统的编程中,也必须先获得梯度公式,再按梯度公式计算梯度值,
示例如下:
x = 3
dy = 2*x
print('y对x的梯度:',dy)
运行结果如下:
y对x的梯度: 6
传统求梯度的方式在深度学习中会非常麻烦,因为深度学习的模型函数随着层数的增加、激活函数的改变,往往是多变的,
每当深度学习模型进行一些微小变化时,都需要推导梯度公式、修改代码,因此会非常麻烦
本节讲解在pytorch如何实现梯度自动计算功能
pytorch的tensor变量有一个特色,就是可以带有梯度,并自动计算梯度(求导)
以为例,现要知道在时,x的梯度值,
在pytorch中并不需要计算梯度公式,而是通过对y调用backward命令就可以直接获得x的梯度
实现方法如下:
import torch
x = torch.tensor([3],dtype=(float),requires_grad=True) # 生成一个tensor数据x
y = x@x # 根据x计算y
y.backward() # 将y反向传播
print('y对x的梯度:',x.grad) # 打印y对x的梯度
运行结果如下:
y对x的梯度: tensor([6.], dtype=torch.float64)
也就是只需要对因变量y调用backward命令,pytorch就会把自变量x的梯度自动更新到x的grad属性中
在pytorch中,自动求导的流程如下:
1.先指定自变量为tensor变量,并且是带梯度的tensor变量,并且必须是小数类型,示例如下:
import torch
x = torch.tensor([3],dtype=(float),requires_grad=True) # 生成一个tensor数据x
2.计算因变量,因变量可以给出,也可以间接给出,示例如下:
y = x@x # 根据x计算y
z = 3*y # 根据y计算z
3.对因变量调用backward(此时就会更新自变量的grad属性),示例如下:
z.backward() # 将y反向传播
4.查看自变量的梯度,示例如下:
print('z对x的梯度:',x.grad)
整体所有代码如下:
import torch
x = torch.tensor([3],dtype=(float),requires_grad=True) # 生成一个tensor数据x
y = x@x # 根据x计算y
z = 3*y # 根据y计算z
z.backward() # 将z反向传播
print('z对x的梯度:',x.grad)
运行结果如下:
z对x的梯度: tensor([18.], dtype=torch.float64)
好了,以上就是pytorch的自动计算梯度的功能了~
End