一、Tensor对象及其运算
- Tensor对象是一个任意维度的矩阵,但是一个Tensor中所有元素的数据类型必须一致。
- torch包含的数据类型和普通编程语言的数据类型相似,包含浮点型、有符号整型和无符号整形。
- 在使用Tensor数据类型时,可以通过dtype属性指定它的数据类型,device指定它的设备(CPU或GPU)
import torch import numpy as np # torch.tensor print("torch.Tensor 默认为:{}".format(torch.Tensor(1).dtype)) print("torch.Tensor 默认为:{}".format(torch.tensor(1).dtype)) # 可以用list构建 a = torch.tensor([[1, 2], [3, 4]], dtype=torch.float64) # 也可以用ndarray构建 b = torch.tensor(np.array([[1, 2], [3, 4]]), dtype=torch.uint8) print(a) print(b) # 通过device指定设备 cpu0 = torch.device('cpu:0') c = torch.ones((2, 2), device=cpu0) print(c)
-
.通过device在CPU上定义变量后,可以在终端上通过nvidia-smi命令查看显卡占用。torch还支持CPU和GPU之间复制变量。
c = c.to('cpu', torch.double) print(c.device) b = b.to(cpu0, torch.float) print(b.device)
-
对Tensor执行算数运算符的运算,是两个矩阵对应元素的运算。torch.mm执行矩阵乘法的运算。
a = torch.tensor([[1, 2], [3, 4]]) b = torch.tensor([[1, 2], [3, 4]]) c = a * b print("逐元素相乘:", c) c = torch.mm(a, b) print("矩阵乘法:", c)
-
torch.clamp起到分段函数的作用,可以用于去掉矩阵中过小或者过大的元素;
-
torch.round将小数转为整数;
-
torch.tanh计算双曲正切函数,该函数将数值映射到(0,1)
a = torch.tensor([[1, 2], [3, 4]]) torch.clamp(a, min=2, max=3) a = torch.tensor([-1.1, 0.5, 0.501, 0.99]) torch.round(a) a = torch.Tensor([-3, -2, -1, -0.5, 0, 0.5, 1, 2, 3]) torch.tanh(a)
-
除了ndarray或list类型的数据中创建Tensor,PyTorch还提供了一些可直接创建数据的函数,这些函数往往需要提供矩阵的维度。
-
torch.arange和Python内置的range的使用方法基本相同,,其中第3个参数是步长。torch.linspace的第3个参数指定返回的个数。torch.ones返回全1,torch返回全0矩阵。
print(torch.arange(5)) print(torch.arange(1, 5, 2)) print(torch.linspace(0, 5, 10)) print(torch.ones(3, 3)) print(torch.zeros(3, 3))
-
torch.rand返回范围为[0,1]的均匀分布采样的元素所组成的矩阵
-
torch.randn返回从正态分布采样的元素组成的矩阵
-
torch.randint返回指定区间的均匀分布采样的随机整数所生成的矩阵
torch.rand(3, 3) torch.randn(3, 3) torch.randint(0, 9, (3, 3))