Pytorch实战——2、初探张量

发布时间:2024年01月17日

🍅 写在前面
👨?🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。
🔎个人主页:主页链接(欢迎各位大佬光临指导)
??近期专栏:机器学习与深度学习
???????????????????????LeetCode算法实例
???????????????????????Pytorch实战

张量的创建

  • 张量(Tensors)类似于NumPy的ndarrays(点NumPy实践了解),但张量可以在GPU上进行计算。
    所以从本质上来说,PyTorch是一个处理张量的库。一个张量是一个数字、向量、矩阵或任何n维数组。
  • 下面分别展示了0维张量到n位张量:
    在这里插入图片描述
    在这里插入图片描述

一、直接创建

1、

torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False)

功能:从data创建tensor

  • data: 数据,可以是list,numpy
  • dtype: 数据类型,默认与data的一致
  • device: 所在设备,cuda/cpu
  • requires_grad: 是否需要梯度
  • pin_memory: 是否存于锁页内存

在这里插入图片描述
2、

torch.from_numpy(ndarray)

功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个数据,另一个也将会被改动。
在这里插入图片描述

二、依据数值创建

1、

torch.zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

功能:依size创建全0张量

  • size: 张量的形状,如(3, 3)、(3, 224, 224)

  • out: 输出的张量

  • layout: 内存中布局形式,有strided, sparse_coo等

  • device: 所在设备,gpu/cpu

  • requires_grad: 是否需要梯度
    在这里插入图片描述
    2、

torch.zeros_like(input, dtype=None, layout=None, device=None, requires_grad=False)

功能:依input形状创建全0张量

  • input: 创建与input同形状的全0张量
  • dtype: 数据类型
  • layout: 内存中布局形式
    在这里插入图片描述
    3、
torch.ones(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

4、

torch.ones_like(input, dtype=None, layout=None, device=None, requires_grad=False)

功能:依input形状创建全1张量

  • size: 张量的形状,如(3, 3)、(3, 224, 224)
  • dtype: 数据类型
  • layout: 内存中布局形式
  • device: 所在设备,gpu/cpu
  • requires_grad: 是否需要梯度
    在这里插入图片描述
    5、
torch.full(size, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述
6、

torch.full_like(input, dtype=None, layout=torch.strided, device=None, requires_grad=False)

功能: 依input形状创建指定数据的张量

  • size: 张量的形状,如(3, 3)
  • fill_value: 张量的值
    7、
torch.arange(start=0, end. step=1, out=None, dtype=None, -	layout=torch.strided, device=None, requires_grad=False)

功能:创建等差的1维张量

  • start: 数列起始值
  • end: 数列“结束值”
  • step: 数列公差,默认为1

在这里插入图片描述
8、

torch.linspace(start, end, steps=100, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

功能:创建均分的1维张量

  • start: 数列起始值
  • end: 数列结束值
  • steps: 数列长度
    在这里插入图片描述

三、依概率分布创建张量

1、

torch.normal(mean, std, out=None)

功能:生成正态分布(高斯分布)

  • mean: 均值
  • std: 标准差
    四种模式:
    mean为标量,std为标量
    mean为标量,std为张量
    mean为张量,std为标量
    mean为张量,std为张量
    在这里插入图片描述
    2、
torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

功能:生成标准正态分布

  • size: 张量的形状
    在这里插入图片描述
    3、
torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

功能:在区间 生成均匀分布
在这里插入图片描述
4、

torch.randint(low=0, high, size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

功能: 生成整数均匀分布
= size:张量的形状
在这里插入图片描述
5、

torch.randperm(n, out=None, dtype=torch.int64, layout=torch.strided, device=None, requires_grad=False)

功能:生成从0到n-1的随机排列

  • n:张量的长度
    在这里插入图片描述

张量的操作

一、张量拼接与切分

1、

torch.cat(tensors, dim=0, out=None)

功能:将张量按维度dim进行拼接

  • tensors:张量序列
  • dim:要拼接的维度
    在这里插入图片描述
    2、
torch.stack(tensors, dim=0, out=None)

功能:在新创建的维度dim上进行拼接

  • tensors:张量序列
  • dim:要拼接的维度

3、

torch.chunk(input, chunks, dim=0)

功能:将张量按维度dim进行平均切分
返回值:张量列表
注意事项:若不能整除,最后一份张量小于其他张量

  • input:要切分的张量
  • chunks:要切分的份数
  • dim:要切分的维度
    4、
torch.split(tensor, split_size_or_sections, dim=0)

功能:将张量按维度dim进行切分
返回值:张量列表

  • tensor:要切分的张量
  • split_size_or_sections:为int时,表示每一份的长度;为list时,按list元素切分
  • dim:要切分的维度
    在这里插入图片描述

二、张量索引

1、

torch.index_select(input, dim, index, out=None)

功能:在维度dim上,按index索引数据
返回值:依index索引数据拼接的张量

  • index:要索引的张量
    = dim:要索引的维度
  • index:要索引数据的序号
    在这里插入图片描述
    2、
torch.masked_select(input, mask, out=None)

功能:按mask中的True进行索引
返回值:一维张量

  • input:要索引的张量
  • mask:与input同形状的布尔类型张量
    在这里插入图片描述

三、张量变换

1、

torch.reshape(input, shape)

功能:变换张量形状
注意事项:当张量在内存中是连续时,新张量与input共享数据内存

  • input:要变换的张量
  • shape:新张量的形状
    在这里插入图片描述
    2、
torch.transpose(input, dim0, dim1)

功能:交换张量的两个维度

  • input:要交换的张量
  • dim0:要交换的维度
  • dim1:要交换的维度
    在这里插入图片描述
    3、
torch.t(input)

功能:2维张量转置,对矩阵而言,等价于torch.transpose(input, 0, 1)
在这里插入图片描述
4、

torch.squeeze(input, dim=None, out=None)

功能:压缩长度为1的维度(轴)

  • dim:若为None,移除所有长度为1的轴;若指定维度,当且仅当该轴长度为1时,可以被移除
    在这里插入图片描述
    5、
torch.unsqueeze(input, dim, out=None)

功能:依据dim扩展维度

  • dim:扩展的维度
    在这里插入图片描述
文章来源:https://blog.csdn.net/m0_52000372/article/details/135658366
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。