Pytorch 中的简单数据操作
数据在 Pytorch 中以 tensor 的形式存在,简单的数据创建方法
import torch
x = torch.randn(2, 2) # 创建一个 2 x 2 的随机值 tensor
y = torch.zeros(2, 2) # 创建一个 2 x 2 的全 1 tensor
z = torch.tensor([[1.0, 1.0], [1.0, 1.0]], dtype=torch.float32) # 直接赋值创建 2 x 2 的 tensor
tensor 的简单运算
z = x + y # 加法
z = x * y # 矩阵点乘
z = x.mm(y) # 矩阵×乘
torch.mm(x, y, z) # 同上
tensor 的维度改变
x1 = x.view(1, 4) # view 仅改变维度,共享内存,不改变存储方式
print(x1.size()) # 输出 x1 的形状, (1, 4)
x += 1 # x1 同时改变
y1 = x.view(-1, 1) # -1 为自动计算形状, (4, 1)
x2 = x.clone().view(1, 4) # 不共享内存
tensor 与 numpy 的相互转换
import numpy as np
# tensor 2 numpy
x = torch.randn(2, 2)
y = x.numpy() # 与 x 共享内存
# numpy 2 tensor
x = np.ones((1, 2))
y1 = torch.from_numpy(x) # 与 x 共享内存
y2 = torch.tensor(x) # 与 x 不共享内存
数据在 CPU 和 GPU 上转换计算
x = torch.randn(1, 2)
if torch.cuda.is_avialable(): # GPU 可用
device = torch.device('cuda')
torch.cuda.set_device(2) # 设置 GPU-2 为主 GPU
# 多 GPU 下使用 torch.nn.DataParallel(module, device_ids)
x = x.to(device) # 转换为 GPU 模式
y = torch.ones_like(x, device=device) # 直接创建 GPU 上数据
z = x + y
z = z.to('cpu', torch.double) # 转化为 CPU
指定目标 GPU 同样可以使得部位 GPU 可见
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '2, 3' # GPU 2,3 可见