老饼讲解-深度学习 机器学习 神经网络 深度学习
pytorch入门
1.pytorch学前准备
2.pytorch的基础操作
3.pytorch的梯度计算
4.pytorch的数据
5.pytorch-小试牛刀

【入门】pytorch的梯度自动计算功能

作者 : 老饼 发表日期 : 2023-07-28 10:44:44 更新日期 : 2024-01-19 08:15:01
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com


梯度计算在机器学习、深度学习中是最常用的功能,

在传统的编程中,梯度计算依赖于梯度公式,因此在实现上较为困难与繁琐

本文讲解在pytorch中如何实现自动计算梯度,它是pytorch实现深度学习的基础




 一. 传统编程中的梯度计算方法    



本节先回顾传统编程中是如何实现梯度计算的



01. 传统求梯度的实现方法


为例,现要知道在时,x的梯度值,

传统的做法是先求出x的梯度公式,再按梯度公式计算x的梯度值

计算过程如下:

由      

可知   
 

因此,在传统的编程中,也必须先获得梯度公式,再按梯度公式计算梯度值,

示例如下:

x  = 3
dy = 2*x
print('y对x的梯度:',dy) 

运行结果如下:

y对x的梯度: 6

传统求梯度的方式在深度学习中会非常麻烦,因为深度学习的模型函数随着层数的增加、激活函数的改变,往往是多变的,

每当深度学习模型进行一些微小变化时,都需要推导梯度公式、修改代码,因此会非常麻烦




二. pytorch的自动梯度功能    



本节讲解在pytorch如何实现梯度自动计算功能



01. 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属性中



02.pytorch自动求导说细解说


在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 





联系老饼