文章目录
- pytorch求导机制
-
- 1、backward
- 2、torch.autograd.grad
- 3、区别
- 4、连续求导
pytorch求导机制 1、backward 创建两个矩阵
x:2×3
a:3×2
requires_grad:表示该矩阵可进行求导,相当于一个变量了,默认为false
x = torch.tensor([[1.0, 2.0, 3.], [2., 3., 4.]], requires_grad=True)
a = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
- torck.mul(x,y):
x 点乘 y
x和y形状要相同 - torch.mm(x,y):
x 叉乘 y
x的列和y的行要一致
y = torch.mm(x, a)
文章图片
表示矩阵y对其中的可求导参数(这里是x)进行求导
y.backward():传入的参数 应为 于y相同维度的张量
y.backward(torch.ones_like(y))
x.grad即表示 y 对 x 求导后 的结果
x.grad
文章图片
将梯度清零,否则梯度会累加
x.grad.data.zero_()
2、torch.autograd.grad torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False)
功能:求取梯度
outputs:用于求导的张量,如 loss
inputs:需要梯度的张量
create_graph:创建导数计算图,用于高阶求导
retain_graph:保存计算图
grad_outputs:多梯度权重
x_grad = torch.autograd.grad(outputs=y, inputs=x, grad_outputs=torch.ones_like(y))
文章图片
3、区别
- torch.autograd.grad(): 第一个参数 目标函数 第二个参数 待求解的自变量参数,返回值为 求导结果的tensor
- backward():不需要传入参数,只需要直接调用他 由目标函数tensor调用,无返回值,求导结果在 待求解自变量的grad属性中。
例如:求 y=x ^ 2 对 x 的一阶偏导和二阶偏导。
import torch
x = torch.tensor([6.], requires_grad=True)
y = x ** 2
grad_1 = torch.autograd.grad(y, x, create_graph=True)# grad_1 = dy/dx = 2x = 2 * 6 = 12
grad_2 = torch.autograd.grad(grad_1[0], x)# grad_2 = d(dy/dx)/dx = d(2x)/dx = 2
print(grad_1)
print(grad_2)
【人工智能+大数据|深入浅出pytorch求导机制】
文章图片
推荐阅读
- pytorch|pytorch实现手写数字识别 | MNIST数据集(全连接神经网络)
- 机器学习|机器学习(朴素贝叶斯(Naive Bayes) --阿里云天池)
- 人工智能|不再迷茫-我的第一篇博客
- Machine|机器学习之模型评估
- 大数据|最新的一篇视觉Transformer综述!
- java学习|java面试基础问题答不上来怎么办,快来看鸭~
- MATLAB神经网络|SOM网络算法分析与应用(适合入门、快速上手)
- linux|Linux 受到开发者偏爱的 9 个理由!
- 计算机|计算机界的最高奖项—“图灵奖”