Pytorch张量函数记录

  • 本文链接:
  • 本文目的:主要包含torch.xxx各类函数,这些函数主要用于对torch.Tensor进行操作。
  • 当前版本:Pytorch 1.0.0
  • 需注意的是:本文不包含所有的函数,那和Api doc差别不大。仅包含所有的个人使用频繁的函数,但本人不怎么实用的函数,每类也会简单记录一下,给下次需要时提供。


本文目录

  • Pytorch张量函数记录
  • 1. 张量创建
  • 1.1 已有其他类型数据创建
  • 1.2 直接创建
  • 2. 张量选取
  • 3. 张量拼接和切分
  • 3.1 `torch.cat()`
  • 3.2 `torch.stack()`
  • 4. 张量形状变换
  • `torch.norm()`


1. 张量创建

1.1 已有其他类型数据创建

介绍:如果你有array_like类型的数据(包括list, tuple, ndarray, sclar等),可通过这些方法转换为Tensor对象。

  • torch.tensor(data) 深拷贝data中的数据,创建一个新的Tensor
  • torch.from_numpy(ndarray) 与传入的ndarray共享内存,即,新Tensor和输入的ndarray,谁发生改动,都会对共享的数据产生影响。
  • torch.as_tensor(data 考虑输入的data是否为Tensor,而决定是深拷贝还是浅拷贝。

1.2 直接创建

介绍:以torch提供的模板进行Tensor的创建。

  • torch.zeros(*sizes) 创建全0张量
  • torch.zeros_like(input) 创建与input形状相同的全0张量
  • torch.ones(*sizes) 创建全1张量
  • torch.arange(start=0, end, step=1) 创建从startstep的步伐增长到end-1的张量
  • torch.eye(n) 创建对角线全为1,其余为0的n*n矩阵Tensor
  • torch.full(size, fill_value) 创建全为fill_valueTensor
  • 随机创建,见随机采样部分

注意:其中,一般使用sizes来表示形状。*sizes一般是支持一串数字,或者是list和tuple这样的集合对象。而size呢,则需要考虑后面的参数,防止误读,只能传入list或tuple对象。

2. 张量选取

  • torch.index_select(input, dim, index) 在指定维度上,根据索引来选择元素,返回新的Tensor
  • torch.masked_select(input, mask) 传入原Tensor和相同形状的mask Tensor,使用mask来选择元素。
  • torch.nonzero(input) 返回所有不为0元素的索引。注意,返回的Tenosr不是选取的数据,而是索引。
  • torch.where(condition, x, y)

3. 张量拼接和切分

这一部分的形式与上面有一些不同,会添加示例进行细致的讲解。

  • torch.cat(tensors, dim=0):在已有维度上拼接两个Tensor。【有示例】
  • torch.stack(seq, dim):创建新的维度,并在新的维度上堆叠两个Tensor。【有示例】
  • torch.split(tensor, split_size_or_sections, dim=0) 在指定维度上,对Tensor进行切分。

3.1 torch.cat()

介绍:在已有维度上拼接两个Tensor
完整函数:torch.cat(tensors, dim=0, out=None) → Tensor 参数:

  • tensors (sequence of Tensors) – Tensor序列,可以由list或tuple组装。注意,除了dim维度,所有tensors在其他维度上应该形状相同
  • dim (int, optional) – 拼接维度。
>>> x = torch.randn(2, 3)
>>> x
tensor([[ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 0)
tensor([[ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497],
        [ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497],
        [ 0.6580, -1.0969, -0.4614],
        [-0.1034, -0.5790,  0.1497]])

3.2 torch.stack()

介绍:创建新的维度,并在新的维度上堆叠两个Tensor
完整函数:torch.stack(seq, dim=0, out=None) → Tensor 参数:

  • seq (sequence of Tensors) – Tensor序列,可以由list或tuple组装。注意,所有Tensor形状需要相同
  • dim (int, optional) – 新设置的维度位置,若为0,则在第0个维度前插入维度作为堆叠的维度。
>>> x = torch.arange(6).view(2,3)
>>> x
tensor([[0, 1, 2],
        [3, 4, 5]])
>>> torch.stack([x,x], 0)
tensor([[[0, 1, 2],
         [3, 4, 5]],
        [[0, 1, 2],
         [3, 4, 5]]])
>>> torch.stack([x,x], 0).size()
torch.Size([2, 2, 3])

4. 张量形状变换

  • torch.reshape(input, shape)
  • torch.transpose(input, dim0, dim1)
  • torch.t(input)
  • torch.squeeze(input, dim)
  • torch.unsqueeze(input, dim)

torch.norm()

torch.norm(input, p, dim, out=None) → Tensor

介绍:用于计算Tensor的p范数
参数:

  • input (Tensor) – 输入张量
  • p (int, float, inf, -inf, ‘fro’, ‘nuc’, optional) – 范数计算中的幂指数值或字符串
>>> import torch
>>> a = torch.arange(3, dtype= torch.float)
>>> torch.norm(a)
tensor(2.2361)

参考

  1. Pytorch官方文档