PyTorch是最优秀的深度学习框架之一,它简单优雅,非常适合入门。本文将介绍如何快速学习 PyTorch ,入门深度学习。
2017 年初,Facebook 在机器学习和科学计算工具 Torch 的基础上,用 Python 语言发布了一个全新的机器学习工具包 PyTorch。因其在灵活性、易用性、速度方面的优秀表现,经过2年多的发展,PyTorch 已经成为从业者最重要的研发工具之一。
这次给大家带来的是 60 分钟极速入门 PyTorch 的小教程,助你轻松上手 PyTorch!大家也可直接在实验楼学习:
https://www.shiyanlou.com/courses/1073
这个 PyTorch 教程有哪些与众不同的地方?我们先来快速看一下:
一、多达 9 个实战项目,覆盖计算机视觉、自然语言、神经网络、强化学习……
课程包含多达 9 个实战项目,不会一上来就告诉你枯燥的理论,而是通过一个个有趣的项目,在实践中教会你 PyTorch 。
这些项目有:图像识别器、让机器作曲、教机器玩游戏(设计游戏AI)、图像风格迁移(比如把照片变成油画)、让机器理解文本情绪等……你会发现深度学习并非那么枯燥和遥不可及,取而代之的是进入新世界的惊喜和实现项目后的成就感~
二、大牛制作
课程是《深度学习原理与 PyTorch 实战》一书的配套教程和实验内容。主要作者 —— 张江老师是北师大系统科学学院教授、博士生导师,也是集智俱乐部、集智学园创始人,是国内该领域的引路者之一。
三、配套书籍、直播,新手也能学会
除了配套的《深度学习原理与 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
PyTorch 是一个开源的深度学习框架,由 Facebook 支持开发。
它的前身为 Torch,但因为 Torch 使用的编程语言是 Lua,在国内流行度很小。
Facebook 为了迎合数量更多的 Python 用户的需求,推出了 PyTorch。
PyTorch 完全开源意味着你可以轻易获取它的代码,并按照自己的需求对它进行修改。
比如让 PyTorch 支持复数运算等等。
PyTorch 还有另外一个非常出众的特点是,
使用 PyTorch 框架编写出的神经网络模型的代码非常简洁。
实现同样的功能,使用 PyTorch 框架编写的代码往往更清晰明了,
这点我们可以从下图中略见一斑:
PyTorch 的基本数据单元是张量(Tensor),它实际上是一种 N 维数组。
下面我们列举了三种张量,可以看到它们的维度阶数是不同的。
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)
来完成。
▶ 示例代码:
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 代码:
用来构建计算图的数据叫做自动微分变量(Variable),它与 Tensor 不同。
每个 Variable 包含三个属性,分别对应着数据(data),父节点(creator),以及梯度(grad)。
其中 “梯度” 就是反向传播算法所要传播的信息。
而父节点用于将每个节点连接起来构建计算图(如上图所示)。
下面我们编写代码实际使用自动微分变量。
▶ 示例代码:
#导入自动梯度的运算包,主要用Variable这个类
from torch.autograd import Variable
#创建一个Variable,包裹了一个2*2张量,将需要计算梯度属性置为True
x = Variable(torch.ones(2, 2), requires_grad=True)
x
可以按照 Tensor 的方式进行计算
经过上面变量 x 和 y 的运算,我们就有了一个简单的计算图,它是下面这个样子的:
以上就是我们「 PyTorch 入门与实战 」课程第一节的内容节选,相信你已经对 PyTorch 和深度学习建立了一些印象。如果想进一步学习 PyTorch ,亲手实现这些有趣的深度学习项目,可以登录实验楼学习:
https://www.shiyanlou.com/courses/1073
我们还准备了几十张 20 元的 优惠券
欢迎大家在评论区领取哦~