60 分钟入门 PyTorch !这里有一份新手指南

640?wx_fmt=jpeg

PyTorch是最优秀的深度学习框架之一,它简单优雅,非常适合入门。本文将介绍如何快速学习 PyTorch ,入门深度学习。

2017 年初,Facebook 在机器学习和科学计算工具 Torch 的基础上,用 Python 语言发布了一个全新的机器学习工具包 PyTorch。因其在灵活性、易用性、速度方面的优秀表现,经过2年多的发展,PyTorch 已经成为从业者最重要的研发工具之一。

这次给大家带来的是 60 分钟极速入门 PyTorch 的小教程,助你轻松上手 PyTorch!大家也可直接在实验楼学习:

https://www.shiyanlou.com/courses/1073

这个 PyTorch 教程有哪些与众不同的地方?我们先来快速看一下:

一、多达 9 个实战项目,覆盖计算机视觉、自然语言、神经网络、强化学习……

课程包含多达 9 个实战项目,不会一上来就告诉你枯燥的理论,而是通过一个个有趣的项目,在实践中教会你 PyTorch 。

这些项目有:图像识别器、让机器作曲、教机器玩游戏(设计游戏AI)、图像风格迁移(比如把照片变成油画)、让机器理解文本情绪等……你会发现深度学习并非那么枯燥和遥不可及,取而代之的是进入新世界的惊喜和实现项目后的成就感~

640?wx_fmt=png

二、大牛制作

课程是《深度学习原理与 PyTorch 实战》一书的配套教程和实验内容。主要作者 —— 张江老师是北师大系统科学学院教授、博士生导师,也是集智俱乐部、集智学园创始人,是国内该领域的引路者之一。

640?wx_fmt=png

三、配套书籍、直播,新手也能学会

除了配套的《深度学习原理与 PyTorch 实战》书籍和实验环境,张江老师还在集智学园亲自开设了 11 节直播课程,讲解本书内容,即使你之前从没接触过深度学习,也能学会这个课程。

直播链接:https://campus.swarma.org/gcou=421

下面我们的内容摘自课程的第一节实验,你可以在 60 分钟内快速入门 PyTorch 这个优秀的框架:

1.1 实验内容

Pytorch 是由 Facebook 支持的一套深度学习开源框架,

相比较 Tensorflow,它更加容易快速上手,所以一经推出就广受欢迎。

本课程是采用 Pytorch 开源框架进行案例讲解的深度学习课程。

Tensor(张量)是 PyTorch 的基础数据结构,自动微分运算是深度学习的核心。

在本实验中我们将学习 PyTorch 中 Tensor 的用法,以及简单的自动微分变量原理,

最后,我们还会使用 PyTorch 构建一个简单的线性回归网络。

1.2 实验知识点

  • PyTorch 简介

  • PyTorch 中的张量及其运算

  • PyTorch 中的自动微分运算

  • 用 PyTorch 实现线性回归

1.3 实验环境

  • Python 3.6

  • PyTorch 1.0.1

  • Jupyter Notebook

1.4 适合人群

本课程难度为一般,属于初级实践级别课程,适合具有 Python 基础并对深度学习有一定认识的用户,将 PyTorch 应用到简单问题的解决中。

二、有关张量(Tensor)运算的练习

2.1 使用 Tensor

640?wx_fmt=png

PyTorch 是一个开源的深度学习框架,由 Facebook 支持开发。

它的前身为 Torch,但因为 Torch 使用的编程语言是 Lua,在国内流行度很小。

Facebook 为了迎合数量更多的 Python 用户的需求,推出了 PyTorch。

PyTorch 完全开源意味着你可以轻易获取它的代码,并按照自己的需求对它进行修改。

比如让 PyTorch 支持复数运算等等。

PyTorch 还有另外一个非常出众的特点是,

使用 PyTorch 框架编写出的神经网络模型的代码非常简洁。

实现同样的功能,使用 PyTorch 框架编写的代码往往更清晰明了,

这点我们可以从下图中略见一斑:

640?wx_fmt=png

PyTorch 的基本数据单元是张量(Tensor),它实际上是一种 N 维数组。

下面我们列举了三种张量,可以看到它们的维度阶数是不同的。

640?wx_fmt=png

1 阶的张量可以看做是一个向量,通过索引可以取到一个 “值”。

2 阶张量可以看做为一个矩阵,通过索引可以取到一个个的向量。

3 阶张量有点抽象,不过我们可以从图中看出,

3 阶张量其实就是在 2 阶张量的矩阵中增加了一个深度。

也就是说在 3 阶张量中我们可以通过索引取到一个个的矩阵。

我们不难想象,4 阶张量也就是在 3 阶张量上增加了另外一个轴……

我们可以使用 Tensor.size() 方法获得一个张量的 “尺寸”。

在这里注意 “尺寸” 和维度是两个概念。

就比如对于上图中的 1 阶张量,它的维度为 1,尺寸为 8;

对于上图中的 2 阶张量,它的维度为 2,尺寸为(8,6)。

要使用 PyTorch,首先需要在 Python 中引入 PyTorch 的包。

▶ 示例代码:

import torch  #导入torch包

可以通过以下代码查看当前系统中 PyTorch 的版本:

▶ 示例代码:

print(torch.__version__)

可以使用 zeros,ones 方法生成包含固定值的张量:

▶ 示例代码:

y = torch.ones(5, 3) #产生一个5*3的Tensor,元素都是1	
y

2.2 基本 Tensor 运算

两个 2 阶张量相加的方法实际上就是矩阵加法。

注意,要使两个张量相加,必须保证两个张量的尺寸是一致的。

▶ 示例代码:

z = x + y #两个tensor可以直接相加	
z

下面的语句展示了两个 tensor 按照矩阵的方式相乘,注意 x 的尺寸是 5*3,

y 的尺寸也是 5*3 无法进行矩阵乘法,所以先将 y 进行转置。

转置操作可以用 .t() 来完成,也可以用 transpose(0,1) 来完成。

640?wx_fmt=png

▶ 示例代码:

q = x.mm(y.t()) #x乘以y的转置	
q

所有的 Tensor 的使用方法请见参考链接中的 “Tensor 支持的所有操作”。

2.3 Tensor 与 numpy.ndarray 之间的转换

PyTorch 的 Tensor 可以与 Python 的常用数据处理包 Numpy 中的多维数组进行转换。

▶ 示例代码:

import numpy as np #导入numpy包	
a = np.ones([5, 3]) #建立一个5*3全是1的二维数组(矩阵)	
b = torch.from_numpy(a) #利用from_numpy将其转换为tensor	
b

下面是另外一种转换 Tensor 的方法,类型为 FloatTensor。

▶ 示例代码:

# 还可以是LongTensor,整型数据类型	
c = torch.FloatTensor(a) 	
c

还可以从一个 tensor 转化为 numpy 的多维数组

▶ 示例代码:

b.numpy() 

Tensor 和 Numpy 的最大区别在于 Tensor 可以在 GPU 上进行运算。

默认情况下,Tensor 是在 CPU 上进行运算的,

如果我们需要一个 Tensor 在 GPU 上的实例,需要运行这个 Tensor 的 .cuda () 方法。

在下面的代码中,首先判断在本机上是否有 GPU 环境可用(有 NVIDIA 的 GPU,并安装了驱动)。

如果有 GPU 环境可用,那么再去获得张量 x,y 的 GPU 实例。

注意在最后打印 x 和 y 这两个 GPU 张量的和的时候,我们调用了 .cpu () 方法,

意思是将 GPU 张量转化为 CPU 张量,否则系统会报错。

▶ 示例代码:

if torch.cuda.is_available():  #检测本机器上有无GPU可用	
    x = x.cuda() #返回x的GPU上运算的版本	
    y = y.cuda()	
    z = x + y	
print(z.cpu()) # 打印时注意要把GPU变量转化为CPU变量。


三、有关自动微分(Autograd)变量的练习

动态运算图 (Dynamic Computation Graph) 是 PyTorch 的最主要特性,

它可以让我们的计算模型更灵活、复杂,并可以让反向传播算法随时进行。

而反向传播算法就是深度神经网络的核心。

下面是一个计算图的结构以及与它对应的 PyTorch 代码:

640?wx_fmt=png

用来构建计算图的数据叫做自动微分变量(Variable),它与 Tensor 不同。

每个 Variable 包含三个属性,分别对应着数据(data),父节点(creator),以及梯度(grad)。

其中 “梯度” 就是反向传播算法所要传播的信息。

而父节点用于将每个节点连接起来构建计算图(如上图所示)。

640?wx_fmt=png

下面我们编写代码实际使用自动微分变量。

▶ 示例代码:

#导入自动梯度的运算包,主要用Variable这个类	
from torch.autograd import Variable  	
#创建一个Variable,包裹了一个2*2张量,将需要计算梯度属性置为True	
x = Variable(torch.ones(2, 2), requires_grad=True)  	
x

可以按照 Tensor 的方式进行计算

经过上面变量 x 和 y 的运算,我们就有了一个简单的计算图,它是下面这个样子的:

640?wx_fmt=png


以上就是我们「 PyTorch 入门与实战 」课程第一节的内容节选,相信你已经对 PyTorch 和深度学习建立了一些印象。如果想进一步学习 PyTorch ,亲手实现这些有趣的深度学习项目,可以登录实验楼学习:

https://www.shiyanlou.com/courses/1073

我们还准备了几十张 20 元的 优惠券

欢迎大家在评论区领取哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值