码迷,mamicode.com
首页 > 其他好文 > 详细

pytorch中contiguous()

时间:2020-09-17 19:51:01      阅读:21      评论:0      收藏:0      [点我收藏+]

标签:and   http   执行   数据   返回   组成   不同   改变   blog   

参考博客1

参考博客2

在PyTorch中,有一些对Tensor的操作不会真正改变Tensor的内容,改变的仅仅是Tensor中字节位置的索引。这些操作有:

narrow(), view(), expand(), transpose()

例如执行view操作之后,不会开辟新的内存空间来存放处理之后的数据,实际上新数据与原始数据共享同一块内存。

而在调用contiguous()之后,PyTorch会开辟一块新的内存空间存放变换之后的数据,并会真正改变Tensor的内容,按照变换之后的顺序存放数据。


contiguous:view只能用在contiguous的tensor上。如果在view之前用了 transpose, permute 等,需要用 contiguous() 来返回一个contiguous copy。

一种可能的解释是:

有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。

判断是否contiguous用torch.Tensor.is_contiguous()函数。

import torch
x = torch.ones(10, 10)
x.is_contiguous()  # True
x.transpose(0, 1).is_contiguous()  # False
x.transpose(0, 1).contiguous().is_contiguous()  # True

pytorch中contiguous()

标签:and   http   执行   数据   返回   组成   不同   改变   blog   

原文地址:https://www.cnblogs.com/douzujun/p/13640037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!