张量

PyTorch中的张量(Tensor)与NumPy中的数组(ndarray)十分相似。但是PyTorch中的张量可以利用GPU来加速计算,所以在一定程度上,可以使用PyTorch来替代NumPy进行科学计算。在进行所有的计算之前,我们必须能够创建相应的张量,PyTorch中提供了以下常用方法来创建张量,这些方法都位于torch包下。

  • .tensor(data),直接从现有数据中创建一个张量,其中数据可以是列表、元组、NumPy数组等,PyTorch会始终复制data中的数据而不是直接引用。
  • .rand(*size, out=None),采用随机数初始化建立一个指定大小的张量,其中size参数可以是若干整型数或者列表、元组,用来定义建立的张量的形状。
  • .rand_link(input),用随机数创建一个形状与input一致的新张量。
  • .randn(*size, out=None),随机使用\( (0, 1) \)区间的值,即标准正态分布,来初始化指定形状的张量。
  • .randn_like(input),随机使用\( (0, 1) \)区间的值初始化一个形状与input相同的张量。
  • .randint(low=0, high, size, out=None),随机使用\( [low, high) \)区间的整型值初始化一个形状为size的张量。
  • .randint_like(input, low=0, high),随机使用\( [low, high) \)区间的整型值初始化一个形状与input相同的张量。
  • .randperm(n),返回一个\( [0, n-1] \)的随机整型序列。
  • .zeros(*size),返回一个形状为size的全零张量。
  • .zeros_like(input),返回一个形状与input相同的全零张量。
  • .ones(*size),返回一个形状为size的全1张量。
  • .ones_like(input),返回一个形状与input相同的全1张量。
  • .empty(*size),返回一个未初始化的形状为size的张量。
  • .empty_like(input),返回一个未初始化的形状与input相同的张量。
  • .full(size, value),返回一个形状为size、使用value填充的张量。
  • .full_like(input, value),返回一个形状与input相同、使用value填充的张量。

其中常见的共用参数有以下这些:

  • dtype,张量内个元素的类型。
  • device,定义采用CPU张量还是GPU张量。
  • layout,定义输出张量期望的布局,一般默认与输入张量相同。
  • requires_grad,是否在返回的张量上进行自动微分操作。
  • pin_memory,返回的张量是否定位在固定的内存区间中,只在CPU张量中起效。

除此之外,PyTorch还支持使用torch.from_numpy()来从NumPy数组中导入形成一个张量。或者可以使用tensor.numpy()将一个张量转换为NumPy数组。张量还可以像NumPy数组一样使用索引获取其中的元素,并且支持切片操作,例如t[:, 1]