PyTorch 24小时入门的第一章<张量的操作>的小结。关于PyTorch的安装,建议参考官网pytorch.org的conda安装命令。相关教程和资源见上一篇24小时入门PyTorch。
24小时入门PyTorch深度学习 1 简介
tensor(张量)是PyTorch中最基本的数据形式。 在PyTorch中,使用torch.Tensor
类表示。
2 创建
2.1 torch.tensor()
从整数创建:scalar = torch.tensor(7)
从数组创建:vector = torch.tensor([7, 7])
从多维数组(矩阵):MATRIX = torch.tensor([[7, 8], [9, 10]])
2.2 随机tensor: torch.rand()
random_tensor = torch.rand(size=(3, 4))
2.3 全0或全1(常用于masking操作)
zeros = torch.zeros(size=(3, 4))
torch.zeros_like(input)
ones = torch.ones(size=(3, 4))
torch.ones_like(input)
2.4 一串序列
torch.arange(start, end, step)
3 属性
通过.
来访问张量的属性。常用的有:
- •
shape
: tensor的形状 - •
dtype
: tensor中元素的类型(float/double),默认是float32。通过.type(datatype)
改变数据类型。如tensor_float16 = tensor.type(torch.float16)
- •
device
: tensor保存的设备(CPU or GPU)
4 运算
4.1
代码语言:javascript复制tensor = torch.tensor([1, 2, 3])
tensor 10 # tensor([11, 12, 13])
#或者使用函数torch.add()
4.2 -
代码语言:javascript复制tensor = tensor - 10
tensor # tensor([-9, -8, -7])
4.3 乘
- •
*
(逐元素/element-wise)tensor * tensor
- •
@
矩阵乘法tensor @ tensor
或tensor.matmul(tensor)
注:@
等价于torch.matmul()
等价于torch.mm()
矩阵乘法规则:1.内部维度匹配 2.输出是外部维度
4.4 汇聚
常见的汇聚 (aggregation)操作包括:min()、max()、mean()、sum()
使用tensor. 调用, 如 x.min()
。
4.5 positinal max/min
使用 torch.argmax()
或 torch.argmin()
,可以获取最大值、最小值所在的索引。
5 形状
5.1 转置(改变tensor维度)
- •
torch.transpose(input, dim0, dim1)
- •
tensor.T
5.2 Reshaping, stacking, squeezing and unsqueezing
- •
torch.reshape(input, shape)
:改变input的形状为shape(如果可行) - •
torch.Tensor.view(shape)
:返回原tensor的不同shape的view,但是和原tensor共享数据。改变view也会改变原始tensor。 - •
torch.stack(tensors, dim=0)
:在某个维度(dim)拼接 tensor,尺寸需要匹配。 - •
torch.squeeze(input)
:压缩input,移除dimension为1的维度 - •
torch.unsqueeze(input, dim)
:在dim维度上增加一个维度 - •
torch.permute(input, dims)
:返回一个view,和原始tensor共享数据,维度进行变换。如:x_original = torch.rand(size=(224, 224, 3))
x_permuted = x_original.permute(2, 0, 1)
# New shape: torch.Size([3, 224, 224])
6 索引
和Python list 或Numpy arrays 的索引类似。可用 :
表示该维度的所有值, 然后用,
继续表示下一维度。
例如:x[:, 0]
。
Indexing 的顺序从外到内。
7 与Numpy交互
最常用是 在numpy array和 PyTorch tensor间转换的方法:
torch.from_numpy(ndarray)
: NumPy array -> PyTorch tensor.
torch.Tensor.numpy()
: PyTorch tensor -> NumPy array.
NumPy arrays的datatype为 float64
,而PyTorch大多使用float32
,所以一般需要再转换到float32:
tensor = torch.from_numpy(array).type(torch.float32)
8 随机种子
设置随机种子,方便复现结果。
torch.manual_seed(seed=42)
9 GPU上运行
查看GPU状态的命令行命令:nvidia-smi
查看PyTorch中GPU是否可用:
import torch
torch.cuda.is_available() # True
创建device存储可用设备:
代码语言:javascript复制# Set device type
device = "cuda" if torch.cuda.is_available() else "cpu"
查看GPU数量:
代码语言:javascript复制# Count number of devices
torch.cuda.device_count() # 1
GPU从0开始编号,如果有多个GPU,
想使用第0个: device = 'cuda:0'
第1个: device = 'cuda:1'
数据转移 CPU-->GPU: .to(device)
tensor = torch.tensor([1, 2, 3])
tensor_on_gpu = tensor.to(device)
GPU--> CPU : .cpu()
tensor_back_on_cpu = tensor_on_gpu.cpu()
思维导图: