Pytorch中的contiguous理解
最近遇到这个函数,但查的中文博客里的解释貌似不是很到位,这里翻译一下stackoverflow上的回答并加上自己的理解。
在pytorch中,只有很少几个操作是不改变tensor的内容本身,而只是重新定义下标与元素的对应关系的。换句话说,这种操作不进行数据拷贝和数据的改变,变的是元数据。
这些操作是:
narrow(),view(),expand()和transpose()
举个栗子,在使用transpose()
进行转置操作时,pytorch并不会创建新的、转置后的tensor,而是修改了tensor中的一些属性(也就是元数据),使得此时的offset和stride是与转置tensor相对应的。转置的tensor和原tensor的内存是共享的!
为了证明这一点,我们来看下面的代码:
x = torch.randn(3, 2)
y = x.transpose(x, 0, 1)
x[0, 0] = 233
print(y[0, 0])
# print 233
可以看到,改变了y的元素的值的同时,x的元素的值也发生了变化。
也就是说,经过上述操作后得到的tensor,它内部数据的布局方式和从头开始创建一个这样的常规的tensor的布局方式是不一样的!于是…这就有contiguous()
的用武之地了。
在上面的例子中,x是contiguous的,但y不是(因为内部数据不是通常的布局方式)。注意不要被contiguous的字面意思“连续的”误解,tensor中数据还是在内存中一块区域里,只是布局的问题!
当调用contiguous()
时,会强制拷贝一份tensor,让它的布局和从头创建的一毛一样。
一般来说这一点不用太担心,如果你没在需要调用contiguous()
的地方调用contiguous()
,运行时会提示你:
RuntimeError: input is not contiguous
只要看到这个错误提示,加上contiguous()
就好啦~
Pytorch中的contiguous理解相关推荐
- pytorch中repeat()函数理解
pytorch中repeat()函数理解 最近在学习过程中遇到了repeat()函数的使用,这里记录一下自己对这个函数的理解. 情况1:repeat参数个数与tensor维数一致时 a = torch ...
- PyTorch学习笔记(15) ——PyTorch中的contiguous
本文转载自栩风在知乎上的文章<PyTorch中的contiguous>.我觉得很好,特此转载. 0. 前言 本文讲解了pytorch中contiguous的含义.定义.实现,以及conti ...
- pytorch中的contiguous()
pytorch中的contiguous() 1 先看看官方中英文doc: torch.Tensor.contiguous (Python method, in torch.Tensor) torch. ...
- Pytorch中的contiguous()函数
这个函数主要是为了辅助pytorch中的一些其他函数,主要包含 在PyTorch中,有一些对Tensor的操作不会真正改变Tensor的内容,改变的仅仅是Tensor中字节位置的索引.这些操作有: n ...
- pytorch中的contiguous()函数的浅浅解释
contiguous() 有些tensor并不是占用一整块内存,而是由不同的数据块组成. contiguous()函数的作用:把tensor变成在内存中连续分布的形式. 来自链接一 contiguou ...
- PyTorch中的contiguous解读
本文讲解了pytorch中contiguous的含义.定义.实现,以及contiguous存在的原因,非contiguous时的解决办法.并对比了numpy中的contiguous. contiguo ...
- 详解PyTorch中的contiguous
目录 前言 PyTorch中的is_contiguous是啥? 行优先 为什么需要 contiguous ? 为什么不在view 方法中默认调用contiguous方法? 前言 contiguous ...
- pytorch中的contiguous
contigous 在英文中为 连续的意思,何为连续,就是语义相同的张量存储在连续的内存空间中, 为什么要使用contigous? 因为view()操作需要连续的tensor transpose.pe ...
- Pytorch中dim的理解
dim的定义 dim 表示维度 x = torch.randn(2, 3, 3)print(x) print(x.size()) print(x.dim()) 输出: tensor([[[-1.694 ...
最新文章
- PreTranslateMessage作用和用法
- 建站常用13种PHP开源CMS比较
- 问题集锦(30-35)
- 单机运行环境搭建之 --CentOS-6.4安装MySQL 5.6.10并修改MySQL的root用户密码
- 生成随机长度字符串,比如密码等
- for in for of区别_Python 第5课:for…in循环黄金搭档之列表
- (二分+区间搜索 )Mountain Walking(poj2110/poj2922)
- ApacheCN/iBooker 未来计划 2019.11
- web开发 开发一个能发送邮件的应用
- 如何使用sklearn进行数据挖掘?
- 微型计算机工作最小时间单位,2010~2011学年第1学期微机原理2试卷A(答案)
- 左程云算法课基础06图课程笔记
- python 批量视频转换成图片
- JavaScript Web APIs
- uboot启动流程详细分析(基于i.m6ull)
- R语言 image.binarization: 包_想提高文章的引用率?写个R包吧!- 工具准备篇
- 【转载】PyCharm 或者其他 Idea 官网打不开解决办法:
- 深圳高中女生街头版someone like you
- DNS解析为什么不生效?DNS解析不生效原因分析
- 用Python画中国地图,实现各省份数据可视化!可视化简直了!