什么是PyTorch?
这是一个基于Python的科学计算软件包,针对两组受众:
- Numpy的替代品,可以使用GPU的强大功能
- 深入学习研究平台,提供最大的灵活性和速度
入门
张量
张量与Numpy的ndarray类似,另外还有Tensor也可用于GPU以加速计算
1 | from __future__ import print_function |
构造一个未初始化的5 * 3矩阵:
1 | x = torch.empty(5, 3) |
构造一个随机初始化的矩阵:
1 | x = torch.rand(5, 3) |
构造一个0填充的矩阵 of dtype long:
1 | x = torch.zeros(5, 3, dtype=torch.long) |
直接从数据构造Tensor:
1 | x = torch.tensor([5.5, 3]) |
或者根据现有的张量创建张量。除非用户提供新值,否则这些方法将重用与输入张量的属性,例如dtype
1 | x = torch.tensor([5.5, 3]) |
得到它的大小
1 | print(x, size()) |
注意:torch.Size()
实际上是一个元组,因此它支持所有元组操作
操作
操作有多种语法。下面的示例中,我们将查看添加操作:
增加:语法1
1 | y = torch.rand(5, 3) |
增加:语法2
1 | print(torch.add(x, y)) |
增加:提供输出张量作为参数
1 | result = torch.empty(5, 3) |
增加:就地
1 | # add x to y |
注意:
任何使原张量变形的操作都是用 _ 后固定的。例如:x.copy_(y), x.t_(), 将改变x。
可以使用标准的NumPy索引与所有bells和whistles
1 | x = torch.rand(5, 3) |
调整大小:如果要调整tensor/重塑tensor,可以使用torch.view
:
1 | x = torch.rand(4, 4) |
假如你有一个元素张量,可以用item()获取值作为python数字
1 | x = torch.randn(1) |
torch包含用于多维张量的数据结构,并且定义了浙西额数学运算。此外还提供了徐国使用程序,用于搞笑序列化Tensor和任意类型,以及其他有用的实用程序。
它有一个CUDA对应物,能够在计算能力 >= 3.0的NVIDIA GPU上运行张量计算
关于张量的操作:
NumPy Bridge:
将Torch Tensor转换为NumPy阵列(反之亦然)是一件轻而易举的事
Torch Tensor和NumPy阵列将共享其底层内存位置(如果Torch Tensor在CPU上),更改一个将改变另一个。
将Torch Tensor转换为NumPy数组
1 | a = torch.ones(5) |
了解numpy数组的值如何变化
1 | a.add_(1) |
将NumPy数组转换为Torch Tensor
了解更改np阵列如何自动更改Torch Tensor
1 | import numpy as np |
**注意:**除了CharTensor之外,CPU上的所有Tensor都支持转换为NumPy并返回
CUDA Tensors
可以使用.to
方法将张量移动到任何设备上
1 | x = torch.randn(5, 3) |