pytorch深度学习60分钟快速入门part2:autograd自动化微分

HackHan技术博客 HackHan技术博客     2022-10-13     263

关键词:

 

在PyTorch中,集中于所有神经网络的是autograd包。首先,我们简要地看一下此工具包,然后我们将训练第一个神经网络。

autograd包为张量的所有操作提供了自动微分。它是一个运行式定义的框架,这意味着你的后向传播是由你的代码运行方式来定义的,并且每一个迭代都可以是不同的。

下面,让我们使用一些更简单的术语和例子来解释这个问题。

0x01 变量(Variable)

autograd.Variableautograd包的核心类,它封装了一个张量,并支持几乎所有在该张量上定义的操作。一旦完成了你的计算,你可以调用.backward(),它会自动计算所有梯度。

你可以通过.data属性访问原始的张量,而梯度w.r.t.这个变量被累积到.grad

还有一个类对于autograd的实现非常重要——一个函数。

变量和函数是相互联系的,并建立一个非循环图,它编码了计算的一个完整历史。每个变量都有一个.grad_fn属性,该属性引用了一个创建了该变量的函数(除了由用户创建的变量之外,它们的grad_fnNone)。

如果你想计算导数,你可以在一个变量上调用.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的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面... 查看详情