文章目录

  • view()和reshape()
  • transpose()和permute()
  • contiguous

以后操作基于下述tensor。

import torch
a=torch.rand(2,2,2)
print(a)

view()和reshape()

这两个功能很简单,就是把原来的tensor拍扁,变成8个数,然后按照你给定的形状恢复出来。

问题, 怎么拍扁,就是把第二维里面数依次取出来,比如上面的就是9,5,4,8,4,3,5,7。

问题,怎么恢复出我们要的形状?假设我们要的形状是(1,1,8),先填充你给定的最后一个维度即第二维,然后看你要在这个维度上填充多少个数,我们给的是8,刚好填完就没了。

print(a.view(1,1,8))
print(a.reshape(1,1,8))

发现两者一毛一样。两者拍扁和填充的原理一样,所以当然一样喽。没毛病,都可以升维降维。

print(a.view(1,1,2,4))
print(a.reshape(1,1,2,4))
print(a.view(2,4))
print(a.reshape(2,4))

但是,这两个有不同的地方,reshape更加强大,到底有什么不同,我们会在最后公开。

transpose()和permute()

我们继续对a进行这两个操作:

这两个也非常像,但是这两个的原理和前面两个完全不一样,并不是拍扁然后恢复,而是交换维度,这个似乎非常抽象。

举个例子给你吧,现在维度是(2,2,2),假如我们要交换维度dim=1,dim=2,其流程如下:固定维度dim=0,然后对dim=1,dim=2进行矩阵转置,这个很简单对吧。

print(a.transpose(1,2))#维度1和维度2需要交换
print(a.permute(0,2,1))#效果一样,但用法不一样。表示现在的维度1是原来的维度2


我们观察一下,是不是就是一个转置而已!!!

从上面的用法可以看到,permute更加强大,transpose只能交换两个维度,但是:

print(a.permute(1,2,0))


突然变了3个维度,是不是有点烧脑了,不慌,我们一步一步来,其可以转化为:

print(a.transpose(1,2).transpose(2,0))

以上也是这两者仅有的区别了。

contiguous

在上述transpose()和permute()之后会带来一个后果,即数据地址不连续,这个时候不可以用view操作,只能用reshape。

print(a)
print(a.is_contiguous())#创建tensor或者view或者reshape,tensor的数据地址都是连续的。就是按照那个拍扁的顺序来存储在内存的。
print(a.view(1,1,8))
a=a.transpose(1,2)#交换维度,造成地址不连续
print(a.is_contiguous())
print(a.reshape(1,1,8))#仍然可以用
print(a.view(1,1,8))


tensor中的数据不连续存储,我们可以让其变得连续:

a=a.contiguous()
print(a.view(1,1,8))

contiguous:相接的; 相邻的;

continuous:;持续的;

Pytorch中改变形状和交换维度详解:view()、reshape()、transpose()、permute()以及contiguous()相关推荐

  1. Pytorch中dilation(Conv2d)参数详解

    目录 一.Conv2d 二.Conv2d中的dilation参数 一.Conv2d 首先我们看一下Pytorch中的Conv2d的对应函数(Tensor通道排列顺序是:[batch, channel, ...

  2. pytorch中的nn.LSTM模块参数详解

    直接去官网查看相关信息挺好的,但是为什么有的时候进不去 官网:https://pytorch.org/docs/stable/nn.html#torch.nn.LSTM 使用示例,在使用中解释参数 单 ...

  3. pytorch中的.detach和.data深入详解

    前言:这两个方法都可以用来从原有的计算图中分离出某一个tensor,有相似的地方,也有不同的地方,下面来比较性的看一看.PyTorch0.4以及之后的版本中,.data 仍保留,但建议使用 .deta ...

  4. Pytorch中的train和eval模式详解

    (一).model.train()和model.eval()分别在训练和测试中都要写,它们的作用如下: (1). model.train() 启用 BatchNormalization 和 Dropo ...

  5. python中文读音ndarray-numpy中的ndarray方法和属性详解

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  6. python怎么横着输出_对python3中, print横向输出的方法详解

    对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...

  7. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  8. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  9. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

最新文章

  1. 公司虚拟化平台VMware vCenter Server无法连接故障排查解决
  2. 「后端小伙伴来学前端了」CSS3伪元素选择器 ::before ::after | 记录自己的前端学习日子
  3. restful-api接口的设计规范介绍
  4. 12种Javascript解决常见浏览器兼容问题的方法
  5. 150秒内诊断脑瘤!最新医学影像AI在《Nature Medicine》发表
  6. Android异常总结---1.Android java.net.SocketException: Address family not supported by protocol
  7. Win10 Redstone再添新技能:深度集成App-V应用虚拟化
  8. 如何确定恶意软件是否在自己的电脑中执行过?
  9. mysql实现自动更新时间戳
  10. python学生信息管理系统 实验报告_Python学生信息管理系统的开发
  11. 性能优化-测试If-Else和if哪个性能更好
  12. nmap超快高效扫描端口
  13. The user specified as a definer (‘skip-grants user‘@‘skip-grants host‘) does not exist
  14. Xiaojie雷达之路---脉冲压缩
  15. php注入过程详解,PHP注入代码详解
  16. Let's go to the EX
  17. 【前端】使用nexus搭建本地npm仓库
  18. 短语、直接短语、句柄、素短语
  19. opencv学习笔记五:cv2.warpAffine()函数详解
  20. 2023年网络安全比赛--网络安全事件响应中职组(超详细)

热门文章

  1. 图灵5周年系列活动之科普大爆炸(免费!)
  2. GAN网络生成:感知损失(Perceptual Losses)
  3. 亚1纳米制程晶体管,一个碳原子栅极厚度:清华重大突破登上Nature
  4. 刷新4项文档智能任务纪录,百度TextMind打造ERNIE-Layout登顶文档智能权威榜单
  5. ICML 2018大奖出炉:伯克利、MIT获最佳论文(附论文、项目链接)
  6. 从一线撤回二三线城市的程序员们,最后都怎么样了?
  7. 兰州大学的《致谢》火了:“我从来不曾优秀过,也从来不曾放弃过!”
  8. CVPR 2020:华为GhostNet,超越谷歌MobileNet,已开源
  9. 初中参观机器人博物馆的作文_2021考研英语二大作文模板整理
  10. SAP QM QE02 修改检验结果,报错 -No characteristics were found–