关键词:
在PyTorch中,集中于所有神经网络的是autograd
包。首先,我们简要地看一下此工具包,然后我们将训练第一个神经网络。
autograd
包为张量的所有操作提供了自动微分。它是一个运行式定义的框架,这意味着你的后向传播是由你的代码运行方式来定义的,并且每一个迭代都可以是不同的。
下面,让我们使用一些更简单的术语和例子来解释这个问题。
0x01 变量(Variable)
autograd.Variable
是autograd
包的核心类,它封装了一个张量,并支持几乎所有在该张量上定义的操作。一旦完成了你的计算,你可以调用.backward()
,它会自动计算所有梯度。
你可以通过.data
属性访问原始的张量,而梯度w.r.t.这个变量被累积到.grad
。
还有一个类对于autograd的实现非常重要——一个函数。
变量和函数是相互联系的,并建立一个非循环图,它编码了计算的一个完整历史。每个变量都有一个.grad_fn
属性,该属性引用了一个创建了该变量的函数(除了由用户创建的变量之外,它们的grad_fn
是None
)。
如果你想计算导数,你可以在一个变量上调用.backward()
。如果变量是一个标量(也就是说它包含一个元素数据),那么你不需要为backward()
指定任何参数,但是如果它有更多元素,那么你需要指定一个grad_output
参数,该参数是一个匹配形状的张量。
import torch
from torch.autograd import Variable
创建一个变量:
x = Variable(torch.ones(2, 2), requires_grad=True)
print(x)
输出结果:
Variable containing:
1 1
1 1
[torch.FloatTensor of size 2x2]
做一个变量操作:
y = x + 2
print(y)
输出结果:
Variable containing:
3 3
3 3
[torch.FloatTensor of size 2x2]
y
是由于操作而创建的,所以它有一个grad_fn
。
print(y.grad_fn)
输出结果:
<AddBackward0 object at 0x7ff91b4f0908>
对y
做更多操作:
z = y * y * 3
out = z.mean()
print(z, out)
输出结果:
Variable containing:
27 27
27 27
[torch.FloatTensor of size 2x2]
Variable containing:
27
[torch.FloatTensor of size 1]
0x02 梯度(Gradients)
现在我们介绍后向传播,out.backward()
等效于做out.backward(torch.Tensor([1.0]))
out.backward()
打印梯度d(out)/dx:
print(x.grad)
输出结果:
Variable containing:
4.5000 4.5000
4.5000 4.5000
[torch.FloatTensor of size 2x2]
你应该得到一个元素为4.5的矩阵。我们将这个变量叫做"o"。此时,我们有:
你可以利用梯度做很多疯狂的事情!
x = torch.randn(3)
x = Variable(x, requires_grad=True)
y = x * 2
while y.data.norm() < 1000:
y = y * 2
print(y)
输出结果:
Variable containing:
164.9539
-511.5981
-1356.4794
[torch.FloatTensor of size 3]
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
print(x.grad)
输出结果:
Variable containing:
204.8000
2048.0000
0.2048
[torch.FloatTensor of size 3]
扩展阅读: 变量和函数的文档在这里http://pytorch.org/docs/autograd
以上脚本的总运行时间为:0分0.009秒。
本文中所使用的Python代码:autograd_tutorial.py
pytorch深度学习60分钟快速入门part1:pytorch是什么?
0x00PyTorch是什么?PyTorch是一个基于Python的科学计算工具包,它主要面向两种场景:用于替代NumPy,可以使用GPU的计算力一种深度学习研究平台,可以提供最大的灵活性和速度0x01开始学习1、TensorsTensors(张量)类似于numpy的ndar... 查看详情
pytorch深度学习60分钟快速入门part3:神经网络
神经网络可以通过使用torch.nn包来构建。既然你已经了解了autograd,而nn依赖于autograd来定义模型并对其求微分。一个nn.Module包含多个网络层,以及一个返回输出的方法forward(input)。例如,查看下图中的对数字图片分类的网络... 查看详情
(翻译)60分钟入门深度学习工具-pytorch(代码片段)
60分钟入门深度学习工具-PyTorch作者:SoumithChintala原文翻译自:一、Pytorch是什么?二、AUTOGRAD三、神经网络四、训练一个分类器五、数据并行他是一个基于Python的科学计算包,目标用户有两类为了使用GPU来替代numpy一个深度学习研... 查看详情
pytorch深度学习:60分钟入门(translation)
这是https://zhuanlan.zhihu.com/p/25572330的学习笔记。 TensorsTensors和numpy中的ndarrays较为相似,因此Tensor也能够使用GPU来加速运算。from__future__importprint_functionimporttorchx=torch.Tensor(5,3)#构造一个未初始化的5*3的矩阵x=torch.rand 查看详情
pytorch60分钟入门教程:pytorch深度学习官方入门中文教程(代码片段)
什么是 PyTorch?PyTorch是一个基于Python的科学计算包,主要定位两类人群:NumPy的替代品,可以利用GPU的性能进行计算。深度学习研究平台拥有足够的灵活性和速度开始学习Tensors(张量)Tensors类似于NumPy的ndarrays,同时 Tensors可... 查看详情
深度学习之30分钟快速入门pytorch(附学习资源推荐)(代码片段)
目录1、Pytorch简介1.0如何使用本教程1.1PyTorch由来1.2Torch简介1.3重新认识PyTorch1.4PyTorch和Tensorflow的对比1.5总结2、Pytorch环境搭建2.1安装Pytorch2.2配置JupyterNotebook2.3测试3、张量4、自动求导5、神经网络6、用cifar10训练一个分类器7、数据... 查看详情
pytorch深度学习60分钟闪电战(代码片段)
https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html官方推荐的一篇教程Tensors#Constructa5x3matrix,uninitialized:x=torch.empty(5,3)#Constructarandomlyinitializedmatrix:x=torch.rand(5,3)#Constru 查看详情
pytorch学习笔记基础知识
PyTorch深度学习:60分钟入门(Translation) 查看详情
pytorch之人工智能学习路线
TyTorchhttp://pytorch.org/官网http://pytorch.org/tutorials/入门教程超简单!pytorch入门教程(一):Tensorhttp://www.jianshu.com/p/5ae644748f21PyTorch深度学习:60分钟入门(Translation)https://zhuanlan.zhihu.com/p/25572330Tensorsan 查看详情
pytorch60分钟入门教程:数据并行处理(代码片段)
...个教程中,我们将学习如何用DataParallel来使用多GPU。通过PyTorch使用多个GPU非常简单。你可以将模型放在一个GPU:device=torch.device("cuda:0")model.to(device)然后,你可以复制所有的张量到GPU:mytensor=my_te 查看详情
pytorch深度学习-01概述(快速入门)
目录Overview1.Goalofthistutorial2.HumanIntelligence3.Machinelearning4.Howtodeveloplearningsystem:5.Newchange6.neuralnetworks(神经网络)6.1反向传播(BackPropagation、BP算法)Overview1.GoalofthistutorialTarget:understandthebasicofneuralnetwork/deeplearningRequirements:Algebra+Probability... 查看详情
vue.js——60分钟快速入门
.../keepfool/p/5619070.html如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DO 查看详情
vue.js——60分钟快速入门
.../keepfool/p/5619070.html如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DO 查看详情
vue.js--60分钟快速入门
.../keepfool/p/5619070.html如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DO 查看详情
vue.js——60分钟快速入门
...上手并使用Vue.js。如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM。它通过一些特殊的HTML 查看详情
pytorch深度学习-06逻辑斯蒂回归(快速入门)(代码片段)
...可及”博主主页:@璞玉牧之本文所在专栏:《PyTorch深度学习》博主简介:21级大数据专业大学生,科研方向:深度学习,持续创作中目录1.LogisticTutorial(逻辑斯蒂回归)1.1WhyuseLogistic(为什么用逻辑斯蒂回... 查看详情
怎么快速入门深度学习
...理论知识,就需要学习一个深度学习的框架:Tensorflow、Pytorch。最近几年pytorch用的人越来越多了。图像识别的话,还需要学习opencv。参考技术A学习深度学习的基础知识:学习深度学习的基本概念,包括神经网络、卷积神经网络... 查看详情
vue.js——vue-router60分钟快速入门
概述vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面... 查看详情