PyTorch 是由 Facebook 主导开发的深度学习框架,因其高效的计算过程以及良好的易用性被诸多大公司和科研人员所喜爱。18 年 5 月,PyTorch 正式宣布集成 Caffe2 和 ONNX 的功能,这是一次让业界期待的更新。本次实验中,我们将从整体上熟悉 PyTorch,并深入学习常用组件的使用。
知识点
- 张量类型和定义
- 索引、切片、变换
- 张量的内部结构
- 自动微分 Autograd
- 深度学习框架对比
除了 Google 的 TensorFlow,Facebook 主导开发的 PyTorch 框架也越来越流行。深度学习框架大同小异,张量,计算图,自动求导,神经网络组件等概念基本都有。而神经学习框架的目的,归根结底就是方便开发者快速构建网络并完成模型训练。
所以,PyTorch 作为深度学习的框架,其实就提供了 2 个核心功能:
- 高效率的张量计算,同时支持强大的 GPU 加速计算功能。
- 搭建深度神经网络,构建在自动求导系统之上的网络结构。
实际上和 TensorFlow 的核心功能相似。接下来,我们了解 PyTorch 的主要模块。相比于 TensorFlow, PyTorch 模块 要精简和清晰很多。
| Package(包) | Description(描述) |
|---|---|
torch |
张量计算组件,兼容 NumPy 数组,且具备强大的 GPU 加速支持 |
torch.autograd |
自动微分组件,是 PyTorch 的核心特点,支持 torch 中所有可微分的张量操作 |
torch.nn |
深度神经网络组件,用于灵活构建不同架构的深度神经网络 |
torch.optim |
优化计算组件,囊括了 SGD,RMSProp,LBFGS,Adam 等常用的参数优化方法 |
torch.multiprocessing |
多进程管理组件,方便实现相同数据的不同进程中共享视图 |
torch.utils |
工具函数组件,包含数据加载、训练等常用函数 |
torch.legacy(.nn/.optim) |
向后兼容组件,包含移植的旧代码 |
张量类型和定义
我们都知道,张量 Tensor 在深度学习中充当着空气的角色,神经网络结构中的每一次输入和输出其实就是针对张量的计算过程。所以,PyTorch 最核心的组件也就是张量计算组件。PyTorch 张量的最大特点之一是兼容 NumPy 数组,且具备强大的 GPU 加速支持。所以,如果你对 NumPy 较为熟悉,那么入门就会简单很多。
下面,我们就来学习如何在 PyTorch 中去定义张量,并对其进行运算。首先,介绍 PyTorch 中支持的 Tensor 类型。目前,PyTorch 提供了 7 种 CPU 支持的 Tensor 类型和 8 种 GPU 支持的 Tensor 类型,它们分别是:
| 数据类型 dtype | CPU 张量 | GPU 张量 |
|---|---|---|
| 32-bit 浮点 | torch.FloatTensor |
torch.cuda.FloatTensor |
| 64-bit 浮点 | torch.DoubleTensor |
torch.cuda.DoubleTensor |
| 16-bit 半精度浮点 | N/A | torch.cuda.HalfTensor |
| 8-bit 无符号整形 (0~255) | torch.ByteTensor |
torch.cuda.ByteTensor |
| 8-bit 有符号整形 (-128~127) | torch.CharTensor |
torch.cuda.CharTensor |
| 16-bit 有符号整形 | torch.ShortTensor |
torch.cuda.ShortTensor |
| 32-bit 有符号整形 | torch.IntTensor |
torch.cuda.IntTensor |
| 64-bit 有符号整形 | torch.LongTensor |
torch.cuda.LongTensor |
其中,默认的 torch.Tensor 类型为 32-bit 浮点,也就是 torch.FloatTensor。
import torch as t
t.Tensor().dtype
如果你想指定全局为某种类型的 Tensor,使得代码书写起来更加方便,就可以通过配置完成,例如:
t.set_default_tensor_type('torch.DoubleTensor')
t.Tensor().dtype
此时,torch.Tensor 类型就被更改为 64-bit 浮点。
当然,最常用的就是默认的 torch.Tensor() ,也就是 torch.FloatTensor()。我们还原配置:
t.set_default_tensor_type('torch.FloatTensor')
t.Tensor().dtype
说完 PyTorch 中支持 Tensor 的类型,接下来我们看一看如何创建 Tensor。当然,最基础的方式是传入一个列表,即可创建:
t.Tensor([1, 2, 3])
还记得上面提到过 PyTorch 张量兼容 NumPy 数组吗?我们也可以直接通过 NumPy 数组来创建张量。
import numpy as np
t.Tensor(np.random.randn(3))
与 Numpy 一致,可以通过 shape 查看 Tensor 的形状:
t.Te

最低0.47元/天 解锁文章
1380

被折叠的 条评论
为什么被折叠?



