PyTorch Autograd(backward grad 等PyTorch核心)

本文详细介绍了PyTorch中的动态计算图、反向传播以及自动微分机制。通过实例展示了如何在PyTorch中创建支持梯度的张量,以及动态计算图如何记录操作以计算梯度。反向传播用于计算神经网络的权重更新,动态计算图则允许在运行时灵活构建计算图,提高效率。文章还解释了雅可比矩阵和向量积的概念,帮助理解autograd类如何工作。

绪论

本人在学PyTorch,对它的计算图产生疑惑。后学习国外一篇博文后,感觉收获颇丰,故转载翻译而来。本文将会主要关注PyTorch计算图相关和autograd类的backward等方面。
在这里插入图片描述
它从不显式计算整个雅可比,它经常简化去直接计算JVP 图1 它从不显式计算整个雅可比,它经常简化去直接计算JVP

1. PyTorch基础

让我们不妨认为,当遇到大型人工神经网络时,我们使用微积分无能为力。通过显式地求解数学方程来计算如此大型的复合函数的梯度是不现实的,尤其因为这些曲线存在于高维空间,是不可能被理解的。
为了处理14维的超平面,可视化一个3-D的空间,然后大声对自己说14。每个人都这么做。——Geoffrey Hinton
这有了PyTorch的 autograd 的用武之地。它抽象了繁琐的数学知识,帮助我们有效地通过几行代码来计算高维曲线的梯度。
在深入探讨之前,我们需要知道一些基础的PyTorch概念
1Tensor:简单地说,它只是PyTorch中的n维数组。Tensor支持一些额外的增强功能,使其独特:除了CPU,它可以被GPU加载,从而计算速度更高。设置.requires_grad = True,它(们)开始构建一个反向图(backward graph),通过使用动态计算图dynamic computation graphDCG,在本文后面会有介绍)追溯操作于在它(们)的每个操作(operation)来计算相关的梯度。
在PyTorch的早期版本中,类torch.autograd.Variable 是用来创建支持计算梯度和追溯操作的tensors,但是随着PyTorch v0.4.0 Variable 类被弃用torch.Tensor和torch.autograd.Variable现在是相同的类。更准确地,torch.Tensor能够追溯历史操作,表现地和旧的Variable一样。
:由于PyTorch的设计,只能计算浮点floating point)tensor的梯度,所以在让它成为能够计算梯度的PyTorch tensor之前,我创建一个float的 numpy数组

#展示多种创建支持梯度tensor的方法
import torch
import numpy as np
x = torch.randn(2, 2, requires_grad = True)
# From numpy
x = np.array([1., 2., 3.]) #只有浮点型的张量才可以 require gradients
x = torch.from_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值