pytorch张量操作

pytorch张量操作

  • 张量的数据类型
  • 张量的生成
    • torch.tensor()
    • torch.Tensor()
    • torch.ones_like()/torch.zeros_like()
    • 张量和numpy数据的相互转换
    • 随机数生成张量
  • 张量的操作
    • torch.reshape
    • torch.unsqueeze()
    • torch.squeeze()
    • .expend()/.expend_as()
    • .repeat()
    • 拼接与拆分
  • 张量的计算

张量的数据类型

数据类型 CPU tensor GPU tensor
32位浮点型 torch.FloatTensor /.cuda./
64位浮点型 torch.DoubleTensor /.cuda./
16位浮点型 torch.HalfTensor /.cuda./
8位无符号整型 torch.ByteTensor /.cuda./
8位有符号整型 torch.CharTensor /.cuda./
16位有符号整型 torch.ShortTensor /.cuda./
32位有符号整型 torch.IntTensor /.cuda./
64位有符号整型 torch.LongTensor /.cuda./
  1. torch中默认的数据类型是32位浮点型,可以通过**torch.set_default_tensor_type()**函数设置默认的数据类型

张量的生成

torch.tensor()

一般将python的列表转换为张量的时候,用小写的tensor这个函数。其中.size()可以看张量的尺寸, .numel()可以看元素个数, .requires_grad指定张量是否需要计算梯度

torch.Tensor()

创建一个2×3的张量。torch.Tensor(2,3)

torch.ones_like()/torch.zeros_like()

创建一个和指定张量维度一样的全一或者全零张量

张量和numpy数据的相互转换

将numpy数组转化为Pytorch张量,可以使用torch.as_tensor()函数和torch.from_numpy()函数。
.numpy()函数即可转化为numpy数组。

随机数生成张量

  1. 随机数种子函数:torch.manual_seed()
  2. 正态分布函数:torch.normal(mean = , std = )
  3. 在[0, 1]区间上生成均匀分布的张量:torch.rand() 括号里直接跟尺寸就行,不用再加括号
  4. 生成0~n的随机整数。打乱序列:torch.randperm(n)
  5. torch.arange(start = ,end = ,step = )
  6. 生成固定数量的等间隔张量:torch.linspace(start = ,end = ,step = )
  7. 全零/全一/单位/填充/空张量:torch.zeros(), torch.ones(), torch.eye(), torch.full((),fill_value =), torch.empty

张量的操作

torch.reshape

改变输入张量的形状

torch.unsqueeze()

在张量的指定维度插入新的维度得到维度提升的张量。
B = torch.unsqueeze(A,dim = )

torch.squeeze()

可以移除指定或者所有维度大小为1的维度,从而得到维度减小的张量
B = torch.squeeze(A,dim = )

.expend()/.expend_as()

对张量的维度进行拓展,从而对张量的形状大小进行修改。例如A是一个2×3的张量,A.expand(3,-1)就把A变成一个每一个元素位置都是一个2×3的张量合起来是一个6×3的张量。.expand_as()就是按某个张量的尺寸进行扩展。

.repeat()

根据指定的形状进行重复填充,得到新的张量。

拼接与拆分

拼接的两种方式,.cat()函数和.stack()函数
.cat()函数可以将多个张量在指定的维度进行拼接,拼接之后维度不会增加。
.stack()函数也可以将多个张量在指定的维度进行拼接,拼接之后维度会增加。
np.vstack() 按垂直方向(行顺序)堆叠数组构成一个新的数组(1,3) (1,3)->(2,3)
np.hstack() 按水平方向(列顺序)堆叠数组构成一个新的数组(1,3) (1,3)->(1,6)

拆分的两种方式,chunk()函数和.split()函数
.chunk()函数可以将张量分割成特定数量的块。
.split()函数可以将张量分成特定数量的块的同时指定每个块的大小。D1, D2, D3 = torch.split(D, [1,2,3],dim=1)

张量的计算

  1. torch.equal() 判断两个张量是否具有相同的形状和元素
  2. torch.t()计算矩阵的转置
  3. torch.matmul() 输出两个矩阵的乘积
  4. torch.inverse()计算矩阵的逆
  5. torch.trace() 计算矩阵的迹
  6. torch.max()/torch.argmax()/torch.min()/torch.argmin() 计算最大值/最大值位置/最小值/最小值位置
  7. torch.sort()默认为升序排列,在输出结果的同时还会输出对应值在原始位置的索引。descending=True,设置为降序排列
  8. torch.topk()计算张量中取值大小排前k的数值和数值位置
  9. torch.kthvalue() 计算张量中取值大小为第k小的数值和数值位置
  10. torch.mean() 根据指定的维度计算均值
  11. torch.sum() 根据指定的维度求和
  12. torch.cumsum() 根据指定的维度计算累加和
  13. torch.median() 根据指定的维度计算中位数
  14. torch.cumprod() 根据指定的维度计算累乘积
  15. torch.std() 根据指定的维度计算标准差

你可能感兴趣的:(pytorch入门与实战,pytorch,深度学习)