PyTorch 学习(1) 什么是 PyTorch
来自 PyTorch 教程 Deep Learning with PyTorch: A 60 Minute Blitz > What is PyTorch?
开始
张量 Tensor
Tensor 类似 numpy 中的 ndarray, 不同的是 Tensor 可以在 GPU 上加速运算
import torch
创建一个 5x3 空矩阵,未初始化(这与 C++ 类似)
x = torch.empty(5, 3)
创建一个随机初始化的矩阵, 取值于 [0, 1)
x = torch.rand(5, 3)
创建零矩阵, 同时声明数据类型
x = torch.zeros(5, 3, dtype=torch.long)
根据数据(array_like)创建张量
x = torch.tensor([5, 3])
基于现有的张量进行创建, 保留相关属性
x = x.new_ones(4, 3)
x = torch.randn_like(x, dtype=torch.float)
获取张量的尺寸 size,返回值为 torch.Size,是一个元组 tuple,并且支持所有元组操作
x.size()
运算操作
加法
# 1
x + y
# 2
torch.add(x, y)
add 可以通过参数指定输出张量
result = torch.empty(5, 3)
torch.add(x, y, out=result)
通过 add_ 可以实现 += 的效果
y.add_(x)
任何使张量发生变化的操作都以 _ 结尾
张量支持 numpy 中的索引操作
x[:, 1]
通过 view 可以调整张量的结构, 通过设置 -1 来自适应,类似 resize
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)
对于只有一个元素的张量,通过 item 将其变成一个 python number
x = torch.randn(1)
x.item()
更多张量操作请查看官方文档
NumPy 对接
使用 numpy 将张量转化为 numpy array
a = torch.randn(3, 4)
b = a.numpy()
使用 from_numpy 将 numpy array 转化为张量
c = torch.from_numpy(b)
当张量在 CPU 上运行时, torch 与 numpy 将共享内存空间,改变其中一个另一个也会改变
CUDA
在创建时指定 device 参数, 或者通过 to 将张量移动到对应设备上,比如 ‘cuda’, ‘cpu’, 或者直接用 cuda
if torch.cuda.is_available():
device = torch.device('cuda') # 获取 CUDA 设备
y = torch.ones_like(x, device=device)
z = x.to(device)
z = x.cuda()