pytorch | transpose、permute、view、contiguous、is_contiguous、reshape
- transpose、contiguous、view
a = torch.randn(2,3) #随机产生的2*3的tensor,内存是连续的,所以打印出“真”
if a.is_contiguous():print("真")
else:print("假")
a = a.transpose(0,1)#经过transpose,维度变换后,内存不连续了,所以打印出“假”
if a.is_contiguous():print("真")
else:print("假")
a = a.contiguous()#contiguous函数将不连续内存变为连续内存,所以打印出“真”
if a.is_contiguous():print("真")
else:print("假")
a = a.view(1,6)#变换维度,但是内存依然连续,所以打印出“真“,view遇到不连续的会报错,只有连续的才不会报错
if a.is_contiguous():print("真")
else:print("假")
结果:
其中:is_contiguous函数是判断一个变量是否内存连续,连续返回True,不连续返回False
- torch.reshape()
a = torch.randn(2,3) #随机产生的2*3的tensor,内存是连续的,所以打印出“真”
if a.is_contiguous():print("真")
else:print("假")
a = a.transpose(0,1)#经过transpose,维度变换后,内存不连续了,所以打印出“假”
if a.is_contiguous():print("真")
else:print("假")
a = torch.reshape(a,(1,6))#reshape相当于将contiguous和view进行了合并,无论之前是连续还是不连续,最终都是连续的,且不会报错
if a.is_contiguous():print("真")
else:print("假")
结果:
- 查看变量的内存地址:id()函数
a = torch.randn(2,3)
print(id(a))
结果:
transpose、permute异同点
transpose:交换维度
torch.manual_seed(1)
a = torch.randn(2, 3)
print(a)
b = a.transpose(0, 1)
print(b)
print('=====================')
a1 = torch.randn(2, 3, 4)
print(a1)
b1 = a1.transpose(1, 2)
print(b1)
结果:
permute:排列、置换维度,比transpose更灵活,适用于多维度
a1 = torch.from_numpy(np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]]]))
print(a1)
b1 = a1.permute(1, 0, 2) # 原本是2*3*3,将第1维和第2维交换,结果变为3*2*3
print(b1)
c1 = a1.permute(1, 2, 0) # 原本是2*3*3,第1维变为第3维,第2维变为第1维,第3维变为第2维,结果是:3*3*2
print(c1)
结果:
虽然都是维度变化,但transpose只能选择两个维度进行交换,permute则可以多维交换。
看函数原型也能看出:
def transpose(self, dim0: _int, dim1: _int) -> Tensor: ...
def permute(self, dims: _size) -> Tensor: ...
pytorch | transpose、permute、view、contiguous、is_contiguous、reshape相关推荐
- 【PyTorch】contiguous==>保证Tensor是连续的,通常transpose、permute 操作后执行 view需要此方法
目录 PyTorch中的is_contiguous是什么含义? 行优先 为什么需要 contiguous ? contiguous 本身是形容词,表示连续的,关于 contiguous, PyTorc ...
- Pytorch中改变形状和交换维度详解:view()、reshape()、transpose()、permute()以及contiguous()
文章目录 view()和reshape() transpose()和permute() contiguous 以后操作基于下述tensor. import torch a=torch.rand(2,2 ...
- PyTorch中contiguous、view、Sequential、permute函数的用法
在pytorch中,tensor的实际数据以一维数组(storage)的形式存储于某个连续的内存中,以"行优先"进行存储. 1. tensor的连续性 tensor连续(conti ...
- 深度学习之Pytorch中的flatten()、transpose()和permute()
1.flatten():压缩维度 input_tensor.flatten(start_dim, end_dim),其中 input_tensor 就是输入的你想压缩的 tensor,start_di ...
- android 如何获得activity的view对象,Android的Activity 、 Window 、 View之间的关系
什么是Activity .View . Window? Activity:是Android 四大组件之一, 是存放View对象的容器,也是我们界面的载体,可以用来展示一个界面.它有一个SetConte ...
- R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、设置transpose参数转置三线表、变量作为列,子组(strata)作为行
R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.设置transpose参数转置三线表.变量作为列,子组(strata)作为行 目录
- Ember——在构建Ember应用程序时,我们会使用到六个主要部件:应用程序(Application)、模型(Model)、视图(View)、模板(Template)、路由(...
在构建Ember应用程序时,我们会使用到六个主要部件: 模板(Template).应用程序(Application).视图(View).路由(Routing).控制器(Controller)和模型(M ...
- Pytorch:深度学习中pytorch/torchvision版本和CUDA版本最正确版本匹配、对应版本安装之详细攻略
Pytorch:深度学习中pytorch/torchvision版本和CUDA版本最正确版本匹配.对应版本安装之详细攻略 目录 深度学习中pytorch/torchvision版本和CUDA版本最正确 ...
- PyTorch 深度学习模型压缩开源库(含量化、剪枝、轻量化结构、BN融合)
点击我爱计算机视觉标星,更快获取CVML新技术 本文为52CV群友666dzy666投稿,介绍了他最近开源的PyTorch模型压缩库,该库开源不到20天已经收获 219 颗星,是最近值得关注的模型压缩 ...
最新文章
- MATLAB从入门到精通系列之MATLAB维度获取size()函数详解
- 【Python】青少年蓝桥杯_每日一题_1.03_输出字符串
- java 图片上传非jsp_java问题用java代码在后台如何将jsp页面上的图片上传(是 爱问知识人...
- 一个小小指针,竟把Linux内核攻陷了!
- 干!一张图整理了 Python 所有内置异常
- HttpClientFactory日志不好用,自己扩展一个?
- div中iframe高度自适应问题
- 消息中间件系列(八):Kafka、RocketMQ、RabbitMQ等的优劣势比较
- 千图成像 马赛克拼图 专用软件 圣诞礼物
- 国科大-刘莹-数据挖掘-第一次作业后总结-纯干货
- 为什么变形兄弟只有四人拿到bilibili百大UP主?【B站数据分析】
- 正大市场监管总局、发改委、证监会联合提醒告诫部分铁矿石
- python写的百度贴吧邮箱采集(带界面)
- 六、品达通用权限系统__pd-tools-log
- BlockingQueue(阻塞队列)
- 终端怎么退出python命令行
- MLAT-Autoencoders for Conditional Risk Factors and Asset Pricing---上篇
- Upload-labs
- 基于原生开发的全新中文安卓应用开发平台
- 【vue】前端根据后端返回的code码查字典表展示文本