1.tensor的简介
Pytorch最基本的操作对象是Tensor(张量),它表示一个多维矩阵,张量类似于NumPyndarrays,
张量可以在GPU上使用以加速计算。Tensor可以跟踪计算图和计算梯度。Numpy的计算无法像Tensor一样在GPU上加速。
张量表示由一个数值组成的数组,这个数组可能有多个维度。 具有一个轴的张量对应数学上的向量(vector); 具有两个轴的张量对应数学上的矩阵(matrix); 具有两个轴以上的张量没有特殊的数学名称。
2.基础使用
2.1导包
import torch
2.2入门
首先,我们可以使用 arange 创建一个行向量 x。这个行向量包含以0开始的前12个整数,它们默认创建为整数。也可指定创建类型为浮点数。张量中的每个值都称为张量的 元素(element)。例如,张量 x 中有 12 个元素。除非额外指定,新的张量将存储在内存中,并采用基于CPU的计算。
x = torch.arange(12)
print(x)
一些常见的功能(打印代码未展示)
x = torch.arange(12) #生成0开始的前12个整数
shape = x.shape #访问张量(沿每个轴的长度)的形状
numel = x.numel() #如果只想知道张量中元素的总数,即形状的所有元素乘积,可以检查它的大小(size)
X = x.reshape(-1, 4) #改变形状,-1代表自动匹配 即3*4
zero = torch.zeros((2, 3, 4)) #2组3*4的0矩阵
one = torch.ones(2, 5) #1矩阵
random = torch.randn(3, 4) #随机
xx = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
结果展示
2.3 运算符
对于任意具有相同形状的张量, 常见的标准算术运算符(+、-、*、/和**)都可以被升级为按元素运算。
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x ** y) # **运算符是求幂运算
exp = torch.exp(x) #e的多少次方
print(exp)
2.4 索引和切片
下次在学
2.5 广播机制
在某些情况下,即使形状不同,我们仍然可以通过调用 广播机制(broadcasting mechanism)来执行按元素操作。 这种机制的工作方式如下:首先,通过适当复制元素来扩展一个或两个数组, 以便在转换之后,两个张量具有相同的形状。 其次,对生成的数组执行按元素操作。
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
ab = a + b
print(a)
print(b)
print(ab)
在大多数情况下,我们将沿着数组中长度为1的轴进行广播
计算过程:
结果:
特别情况:
此处如果是乘法,是对应相乘,而不是矩阵相乘
import torch
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
ab = a * b
print(a)
print(b)
print(ab)
过程:
结果: