目录

PyTorch中的is_contiguous是什么含义?

行优先

为什么需要 contiguous ?


contiguous 本身是形容词表示连续的关于 contiguous,

PyTorch 提供了

  • is_contiguous:用于判定Tensor是否是 contiguous 的,
  • contiguous(形容词动用)两个方法 :保证Tensor是contiguous的。

PyTorch中的is_contiguous是什么含义?

is_contiguous直观的解释是Tensor底层一维数组元素的存储顺序与Tensor按行优先一维展开的元素顺序是否一致

Tensor多维数组底层实现是使用一块连续内存的1维数组(行优先顺序存储,下文描述),Tensor在元信息里保存了多维数组的形状,在访问元素时,通过多维度索引转化成1维数组相对于数组起始位置的偏移量即可找到对应的数据。

如果想要变得连续使用contiguous方法,如果Tensor不是连续的,则会重新开辟一块内存空间保证数据是在内存中是连续的,如果Tensor是连续的,则contiguous无操作。

行优先

行是指多维数组一维展开的方式,对应的是列优先。PyTorch中Tensor底层实现是C,也是使用行优先顺序。举例说明如下:

>>> t = torch.arange(12).reshape(3,4)
>>> t
tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])

二维数组 t 如图1:

数组 t 在内存中实际以一维数组形式存储,通过 flatten 方法查看 t 的一维展开形式,实际存储形式与一维展开一致,如图2,

>>> t.flatten()
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

颜色相同的数据表示在同一行,不论是行优先顺序、或是列优先顺序,如果要访问矩阵中的下一个元素都是通过偏移来实现,这个偏移量称为步长(stride)。在行优先的存储方式下,访问行中相邻元素物理结构需要偏移1个位置,在列优先存储方式下偏移3个位置。

为什么需要 contiguous ?

 torch.view等方法操作需要连续的Tensor。

transpose、permute 操作虽然没有修改底层一维数组,但是新建了一份Tensor元信息,并在新的元信息中的 重新指定 stride。torch.view 方法约定了不修改数组本身,只是使用新的形状查看数据。如果我们在 transpose、permute 操作后执行 view,Pytorch 会抛出以下错误:

invalid argument 2: view size is not compatible with input tensor's size and stride (at least one dimension
spans across two contiguous subspaces). Call .contiguous() before .view().
at /Users/soumith/b101_2/2019_02_08/wheel_build_dirs/wheel_3.6/pytorch/aten/src/TH/generic/THTensor.cpp:213

即需要在transpose()、permute() 操作后先执行contiguous()让后再执行 view(),如下:

windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, win_size, win_size, C)

原文:PyTorch中的contiguous - 知乎

【PyTorch】contiguous==>保证Tensor是连续的,通常transpose、permute 操作后执行 view需要此方法相关推荐

  1. pytorch contiguous的使用

    pytorch contiguous的使用 contiguous一般与transpose,permute,view搭配使用 即使用transpose或permute进行维度变换后,调用contiguo ...

  2. 实践教程 | 浅谈 PyTorch 中的 tensor 及使用

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | xiaopl@知乎(已授权) 来源 | https://z ...

  3. 【小白学PyTorch】9.tensor数据结构与存储结构

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 小白学PyTorch | 8 实战之MNIST小试牛刀 小白学PyTorch | 7 最新版本torchvisi ...

  4. 【深度学习理论】一文搞透pytorch中的tensor、autograd、反向传播和计算图

    转载:https://zhuanlan.zhihu.com/p/145353262 前言 本文的主要目标: 一遍搞懂反向传播的底层原理,以及其在深度学习框架pytorch中的实现机制.当然一遍搞不定两 ...

  5. pytorch 深入理解 tensor.scatter_ ()用法

    pytorch 深入理解 tensor.scatter_ ()用法 在 pytorch 库下理解 torch.tensor.scatter()的用法.作者在网上搜索了很多方法,最后还是觉得自己写一篇更 ...

  6. pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换

    pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换 1, 创建pytorch 的Tensor张量: torch.rand((3,224,224)) #创建随机值的三维张量,大小为 ...

  7. YDOOK:Pytorch : AI : torch.tensor.size() 与 torch.tensor.shape 的区别

    YDOOK:Pytorch : AI : torch.tensor.size() 与 torch.tensor.shape 的区别 区别: 1. torch.tensor.size() 可用通过 :t ...

  8. YDOOK:Pytorch教程:tensor 张量内各个值同时相加一个数

    YDOOK:Pytorch教程:tensor 张量内各个值同时相加一个数 © YDOOK Jinwei Lin, shiye.work import torch import numpy as npt ...

  9. YDOOK AI : Pytorch :使用 tensor.zeros() tensor.zeros_like() 生成定义 全零数组 全0数组

    YDOOK AI : Pytorch :使用 tensor.zeros() tensor.zeros_like() 生成定义 全零数组 全0数组 1_1. tensor.zeros() 函数: tor ...

最新文章

  1. 2022-2028年中国废矿物油行业市场研究及前瞻分析报告
  2. JAVA8的LocalDateTime使用心得和工具类
  3. CSS3盒模型display:box详解
  4. matplotlib-绘制精美的图表
  5. DevExpress的下拉框控件LookUpEdit的使用、添加item选项值、修改默认显示值
  6. 线段树模板hdu 1754:I Hate It
  7. 统一设置网站html文件输出编码为utf-8,以解决乱码问题
  8. google_protobuf数据类型
  9. 利用Teensy进行EM410x卡模拟以及暴力破解EM410X类门禁系统可行性猜想
  10. Linux load函数,kexec_load()函数 Unix/Linux
  11. C语言在main中输入2个整数ab,请教一个C语言问题。若输入3个整数3,2,1,则以下程序输出的结果是.,c 语言问题 输入三个整数 按从小到大输出...
  12. 同样是机器学习算法工程师,你的面试为什么过不了?
  13. Tapestry5中的DI
  14. 全微分推导: 全微分感性理解: 全微分几何意义举例: 偏导与全微分的意义 通过物理性质理解。偏导与全微分的意义
  15. 使用美图秀秀批量处理照片
  16. 腾讯网页登陆的加密机制
  17. flex:1是什么?
  18. Arthas(阿尔萨斯)简记
  19. 深度学习系列7:fastai
  20. 6个网页背景特效源码 canvas+three.js科技贴图 webgl源码

热门文章

  1. 【官方搭建入门】JEECG 平台开发环境搭建必读
  2. 移动页面自适应手机屏幕宽度HTML5开发
  3. jbpm4.4表结构
  4. 在MAC Xcode下安装OpenCV
  5. RE正则表达式与grep
  6. 【转】Elasticsearch5.0 安装问题集锦
  7. 手把手入门神经网络系列-2篇-有图有码(转)
  8. java reflect 例子
  9. Excel表格模板:记帐汇总凭证表下载
  10. JAVA中参数传递问题的总结(按值传递和引用传递)