首页 > 其他分享 >torch和numpy的维度交换方法

torch和numpy的维度交换方法

时间:2023-09-10 12:22:05浏览次数:32  
标签:torch transpose np shape 维度 numpy aaTensor

Tensor的维度转置方法

​ 在搭建神经网络的时候,经常会遇到需要交换维度的时候,比如将HWCN的Tensor维度顺序变换为NCHW顺序,此时需要用到Tensor的转置方法。
​ 一般有以下三种方法:

1、numpy.transpose

​ 如果Tensor是由np.Array转换而来,那么可以在变量还是np.Array的时候先进行通道转置,此时可以使用np.transpose方法:

>>> import numpy as np
>>> aa = np.ndarray((1,3,3,4))
>>> aa.shape
(1,3,3,4)
>>> aa.transpose((3,1,0,2)).shape
(4,3,1,3)
>>> np.transpose(aa,(3,1,0,2)).shape
(4,3,1,3)

​ arr.transpose(new_shape)和np.transpose(arr,new_shape)都合法,结果完全一样。

​ * 如果只是二维数组转置或者只交换第一和最后两个维度,那么也可以用arr.T方法:

>>> aa.T.shape
(4,3,3,1)
2、torch.tranpose

​ torch.transpose方法和np.transpose方法有一个最大的区别,torch.transpose只能支持两个维度的交换,函数原型为:

torch.transpose(tensor,dim0,dim1)

​ 如果超过两个维度,会报错。使用方式为:

>>> aaTensor = torch.from_numpy(aa) 

>>> aaTensor.transpose(0,3).shape
torch.Size([4,3,3,1])

>>> torch.transpose(aaTensor,0,3).shape
torch.Size([4,3,3,1])

>>> aaTensor.transpose(3,1,0,2).shape
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: transpose() received an invalid combination of arguments - got (int, int, int, int), but expected one of:
 * (int dim0, int dim1)
 * (name dim0, name dim1)

​ torch.transpose方法有一个后缀格式函数tensor.transpose_(),是transpose的inplace版本,调用该函数不返回结果,直接修改原始tensor的维度:

>>> aaTensor.transpose_(3,0)
>>> aaTesor.shape
torch.Size([4,3,3,1])
3、torch.permute

torch.permute用法和numpy.transpose完全相同,接受多个指定的维度,将输入Tensor的维度按照指定的维度顺序重排:

>>> torch.permute(aaTensor,3,1,0,2).shape
torch.Size([4,3,1,3])
>>>aaTensor.permute(3,1,0,2).shape
torch.Size([4,3,1,3])

注意torch.transpose、torch.permute、arr.transpose可接受tuple、list、多个整数作为输入,而numpy.transpose只能接受tuple和list。

标签:torch,transpose,np,shape,维度,numpy,aaTensor
From: https://www.cnblogs.com/lumeng199/p/17691004.html

相关文章

  • pip 安装pytorch
    一、新建虚拟环境二、激活虚拟环境三、配置清华镜像源四、在Pytorch官网:PyTorch 选择相关配置 ......
  • 深度学习模型训练中,输入数据维度和标签数据维度调整方法
    forinputs,labelsintrain_loader:#使用numpy的transpose函数调整维度顺序inputs=np.transpose(inputs,(0,3,1,2))#将原输入数据最后一个维度换到第二个维度inputs=inputs.to(device)print(inputs.shape)#调试代码用......
  • PyTorch安装记录
    打开PyTorch官网,选择getstartedhttps://pytorch.org/查看系统的cuda版本nvcc-V若系统安装了cuda,则最后一行会显示cuda版本。如果返回None,则说明没有使用cuda3.选择合适的系统,安装工具以及cuda版本这里没有看到我们需要的11.4的cuda版本,选择installpreviousver......
  • 转:pytorch RoIAlign函数的用法
    图解RoIAlign以及在PyTorch中的使用(含代码示例)_虾米小馄饨的博客-CSDN博客如何在你自己的代码中使用ROIPool和ROIAlign(PyTorch1.0)_ronghuaiyang的博客-CSDN博客 ......
  • Go 语言内置类型全解析:从布尔到字符串的全维度探究
    关注微信公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。本文深入探讨了Go语言的内......
  • PyTorch基础知识
    PyTorchTutorialPython3中机器学习框架dataset=MyDataset(file)dataloader=DataLoader(dataset,batch_size=size,shuffle=True)Training:TrueTesting:Falsefromtorch.utils.dataimportDataset,DateLoaderclassMyDataset(Dataset):def__init__(self,......
  • 《动手学深度学习 Pytorch版》 4.10 实战Kaggle比赛:预测比赛
    4.10.1下载和缓存数据集importhashlibimportosimporttarfileimportzipfileimportrequests#@saveDATA_HUB=dict()DATA_URL='http://d2l-data.s3-accelerate.amazonaws.com/'defdownload(name,cache_dir=os.path.join('..','data'......
  • 《动手学深度学习 Pytorch版》 4.7 前向传播、反向传播和计算图
    4.7.1前向传播整节理论,详见书本。4.7.2前向传播计算图整节理论,详见书本。4.7.3反向传播整节理论,详见书本。4.7.4训练神经网络整节理论,详见书本。练习(1)假设一些标量函数\(X\)的输入\(X\)是\(n\timesm\)矩阵。\(f\)相对于\(X\)的梯度的维数是多少?还是\(n......
  • 《动手学深度学习 Pytorch版》 4.8 数值稳定性和模型初始化
    4.8.1梯度消失和梯度爆炸整节理论,详见书本。梯度消失%matplotlibinlineimporttorchfromd2limporttorchasd2lx=torch.arange(-8.0,8.0,0.1,requires_grad=True)y=torch.sigmoid(x)y.backward(torch.ones_like(x))d2l.plot(x.detach().numpy(),[y.deta......
  • 《动手学深度学习 Pytorch版》 4.9 环境和分布偏移
    4.9.1分布偏移的类型整节理论,详见书本。4.9.2分布偏移示例整节理论,详见书本。4.9.3分布偏移纠正整节理论,详见书本。4.9.4学习问题的分类法整节理论,详见书本。4.9.5机器学习中的公平、责任和透明度整节理论,详见书本。练习(1)当我们改变搜索引擎的行为时会发生什么?用......