PyTorch-24h 00_PyTorch基础(张量)

2023-02-24 19:18:39 浏览数 (1)

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 @ tensortensor.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是否可用:

代码语言:javascript复制
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)

代码语言:javascript复制
tensor = torch.tensor([1, 2, 3])
tensor_on_gpu = tensor.to(device)

GPU--> CPU : .cpu()

代码语言:javascript复制
tensor_back_on_cpu = tensor_on_gpu.cpu()

思维导图:

0 人点赞