基于PyTorch的深度学习入门教程(三)——自动梯度
来源:互联网 发布:js立体饼状图插件 编辑:程序博客网 时间:2024/06/05 11:19
前言
本文参考PyTorch官网的教程,分为五个基本模块来介绍PyTorch。为了避免文章过长,这五个模块分别在五篇博文中介绍。
Part1:PyTorch简单知识
Part2:PyTorch的自动梯度计算
Part3:使用PyTorch构建一个神经网络
Part4:训练一个神经网络分类器
Part5:数据并行化
本文是关于Part2的内容。
Part2:PyTorch的自动梯度计算
autograd package是PyTorch中所有神经网络的核心。先了解一些基本知识,然后开始训练第一个神经网络。autograd package提供了Tensors上所有运算的自动求导功能。它是一个按运行定义(define-by-run)的框架,这意味着反向传播是依据代码运行情况而定义的,并且每一个单次迭代都可能不相同。
1 变量(Variable)
autograd.Variable 是这个package的中心类。它打包了一个Tensor,并且支持几乎所有运算。一旦你完成了你的计算,可以调用.backward(),所有梯度就可以自动计算。
你可以使用.data属性来访问原始tensor。相对于变量的梯度值可以被积累到.grad中。
这里还有一个类对于自动梯度的执行是很重要的:Function(函数)
变量和函数是相互关联的,并且建立一个非循环图。每一个变量有一个.grad_fn属性,它可以引用一个创建了变量的函数(除了那些用户创建的变量——他们的grad_fn是空的)。
如果想要计算导数,可以调用Variable上的.backward()。如果变量是标量(只有一个元素),你不需要为backward()确定任何参数。但是,如果它有多个元素,你需要确定grad_output参数(这是一个具有匹配形状的tensor)。
import torchfrom torch.autograd import Variable
创建一个变量:
x = Variable(torch.ones(2, 2), requires_grad=True)print(x)
对变量做一个运算:
y = x + 2print(y)
y作为一个运算的结果被创建,所以它有grad_fn。
print(y.grad_fn)
在y上做更多的运算:
z = y * y * 3out = z.mean()print(z, out)
2 梯度(Gradients)
现在来做反向传播。out.backward()等价于out.backward(torch.Tensor([1.0]))。
out.backward()
打印梯度 d(out)/dx
print(x.grad)
你应该会得到一个元素为4.5的矩阵。
你可以使用autograd做很多疯狂的事情。
x = torch.randn(3)x = Variable(x, requires_grad=True)y = x * 2while y.data.norm() < 1000: y = y * 2print(y)
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])y.backward(gradients)print(x.grad)
- 基于PyTorch的深度学习入门教程(三)——自动梯度
- 基于PyTorch的深度学习入门教程(一)——PyTorch安装和配置
- 基于PyTorch的深度学习入门教程(七)——PyTorch重点综合实践
- 基于PyTorch的深度学习入门教程(二)——简单知识
- 基于PyTorch的深度学习入门教程(四)——构建神经网络
- 基于PyTorch的深度学习入门教程(五)——训练神经网络分类器
- 基于PyTorch的深度学习入门教程(六)——数据并行化
- 基于PyTorch的深度学习入门教程(八)——图像风格迁移
- pytorch学习笔记(三):自动求导
- PyTorch(六)——梯度反向传递(BackPropogate)的理解
- PyTorch学习—PyTorch是什么?
- PyTorch学习总结(三)——ONNX
- 深度学习笔记---基于动量的梯度下降
- 基于梯度的学习
- 深度学习笔记(三)---梯度检验与高级优化
- 深度学习—随机梯度下降(SGD)
- 深度学习实践操作—从小白到大白(八):安装Pytorch到特定的Anaconda环境
- Pytorch学习笔记(三)
- 在虚拟磁盘中安装Windows Server 2016
- 基于PyTorch的深度学习入门教程(二)——简单知识
- 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-低年级组)
- Service Worker初体验
- 我们未曾尽力的2017,哪些目标没实现?
- 基于PyTorch的深度学习入门教程(三)——自动梯度
- Java的JDBC数据库连接池实现方法
- Spring Boot学习笔记
- 版本管理之gitlab实践教程:基础篇(10)
- 【莫比乌斯反演+数位DP】2017 计蒜之道 复赛 A.阿里云秘钥池
- 基于PyTorch的深度学习入门教程(四)——构建神经网络
- mask-rcnn扩展
- TensorFlow四种Cross Entropy算法实现和应用
- php实现单例模式原理