orch.contiguous()方法语义上是“连续的”,经常与torch.permute()、torch.transpose()、torch.view()方法一起使用,要理解这样使用的缘由,得从pytorch多维数组的低层存储开始说起:

touch.view()方法对张量改变“形状”其实并没有改变张量在内存中真正的形状,可以理解为:

view方法没有拷贝新的张量,没有开辟新内存,与原张量共享内存;
view方法只是重新定义了访问张量的规则,使得取出的张量按照我们希望的形状展现。
pytorch与numpy在存储MxN的数组时,均是按照行优先将数组拉伸至一维存储,比如对于一个二维张量

// An highlighted block
t = torch.tensor([[2, 1, 3], [4, 5, 9]])

在内存中实际上是

[2, 1, 3, 4, 5, 9]

按照行优先原则,数字在语义和在内存中都是连续的,当我们使用torch.transpose()方法或者torch.permute()方法对张量翻转后,改变了张量的形状

// An highlighted block
t2 = t.transpose(0, 1)
t2
tensor([[2,4],[1,5],[3,9])

此时如果对t2使用view方法,会报错:

原因是:改变了形状的t2语义上是3行2列的,在内存中还是跟t一样,没有改变,导致如果按照语义的形状进行view拉伸,数字不连续,此时torch.contiguous()方法就派上用场了

// An highlighted block
t3 = t2.contiguous()
t3
tensor([[2,4],[1,5],[3,9])

可以看到t3与t2一样,都是3行2列的张量,此时再对t3使用view方法:

// An highlighted block
t3.view(-1)
tensor([2, 4, 1, 5, 3, 9])

t3已经按照语义的形状展开了,t2与t共享内存是怎样的呢?

// An highlighted block
t.view(-1)tensor([2, 1, 3, 4, 5, 9])

可以看出contiguous方法改变了多维数组在内存中的存储顺序,以便配合view方法使用
torch.contiguous()方法首先拷贝了一份张量在内存中的地址,然后将地址按照形状改变后的张量的语义进行排列。

torch.contiguous()方法相关推荐

  1. 关于Contiguous()方法

    方法作用:返回一个内存连续的有相同数据的tensor,如果原tensor内存连续,则返回原tensor. 一般与transpose,permute,view等方法搭配使用. 使用示例: 使用trans ...

  2. python torch exp_Python torch.diag方法代码示例

    本文整理汇总了Python中torch.diag方法的典型用法代码示例.如果您正苦于以下问题:Python torch.diag方法的具体用法?Python torch.diag怎么用?Python ...

  3. python柱状图zzt_Python torch.diag方法代碼示例

    本文整理匯總了Python中torch.diag方法的典型用法代碼示例.如果您正苦於以下問題:Python torch.diag方法的具體用法?Python torch.diag怎麽用?Python ...

  4. python torch exp_Python torch.add方法代码示例

    本文整理汇总了Python中torch.add方法的典型用法代码示例.如果您正苦于以下问题:Python torch.add方法的具体用法?Python torch.add怎么用?Python tor ...

  5. python linspace函数_Python torch.linspace方法代碼示例

    本文整理匯總了Python中torch.linspace方法的典型用法代碼示例.如果您正苦於以下問題:Python torch.linspace方法的具體用法?Python torch.linspac ...

  6. PyTorch基础(15)-- torch.flatten()方法

    前言 最近在复现论文中一个块的时候需要使用到torch.flatten()这个方法,这个方法其实很简单,但其中有一些细节可能需要注意,且有个关键点很容易忘记,故在此记录以备查阅. 方法解析 flatt ...

  7. PyTorch基础(十)----- torch.max()方法

    一.前言 这个方法跟上一篇文章的torch.max()方法非常类似,只不过一个是求最大值,一个是求平均值.在某些情况下,甚至可以代替下采样中的最大池化和平均池化,所以说,这两个方法的用处还是蛮大的. ...

  8. torch.contiguous()函数用法

    在看代码的时候发现了torch.contiguous()这个函数,那么它有什么用途呢? 1)背景知识 首先得知道一个tensor的shape和stride的区别.以二维矩阵为例,shape = [ro ...

  9. PyTorch基础(六)----- torch.eq()方法

    一.torch.eq()方法详解 对两个张量Tensor进行逐元素的比较,若相同位置的两个元素相同,则返回True:若不同,返回False. torch.eq(input, other, *, out ...

最新文章

  1. (一)JDBC入门及简介
  2. 学Python很久只学了皮毛?
  3. 连接被远程计算机621,拨号上网常见错误代码提示及解决方法
  4. python 比较文件夹或列表异同
  5. des vue 双倍长 解密_[转]单倍长密钥加密和双倍长密钥加密,银联直联终端62域难点详解...
  6. Stefan Tilkov:跳过单体应用,从微服务开始
  7. 转载、Python的编码处理(二)
  8. C++ STL容器之 list 初步
  9. sublime安装与使用
  10. 网络流性质及常见模型、改进空间的思考
  11. MongoDB 进阶模式设计
  12. (八)java版spring cloud+spring boot+redis多租户社交电子商务平台 -SSO单点登录之OAuth2.0登录认证(2)...
  13. fgui快速接入到一个laya实例项目中
  14. kindlefire刷安卓系统_[原创]安卓4.0完美运行 Kindle Fire刷机教程
  15. Visual Studio - 安装VAX
  16. 北斗产业有哪些“芯”优势
  17. 使用Redis+萤石云保证视频永不过期
  18. 【蓝桥杯】枚举,模拟,排序专题 (一)
  19. 被伽卡他卡禁用任务管理器如何解决
  20. MATLAB代码:基于非对称纳什谈判的多微网电能共享运行优化策略

热门文章

  1. 使用zlib对字符串进行压缩
  2. Java中使用图片验证码 --菜鸟小回
  3. 联邦学习开源框架简介
  4. mysql读取股票数据_读取股票数据存储到本地MySQL数据库(一)
  5. POCO C++ 在IOS上的使用
  6. 攻防世界 upload1 解题思路
  7. python补充超级鹰代码
  8. 玩转curl指令—测试简单的HTTP接口
  9. 借助Bilibili Evolved和aria2批量下载b站视频
  10. 展望下未来的计算机400字,展望未来作文400字(精选8篇)