pytorch中的contiguous()函数的浅浅解释

contiguous()

有些tensor并不是占用一整块内存,而是由不同的数据块组成。

contiguous()函数的作用:把tensor变成在内存中连续分布的形式

来自链接一

contiguous一般与transpose,permute,view搭配使用:使用transpose或permute进行维度变换后,调用contiguous,然后方可使用view对维度进行变形(如:tensor_var.contiguous().view() ),示例如下:

x = torch.Tensor(2,3)
y = x.permute(1,0)         # permute:二维tensor的维度变换,此处功能相当于转置transpose
y.view(-1)                 # 报错,view使用前需调用contiguous()函数
y = x.permute(1,0).contiguous()
y.view(-1)                 # OK

具体原因有两种说法:

1 transpose、permute等维度变换操作后,tensor在内存中不再是连续存储的,而view操作要求tensor的内存连续存储,所以需要contiguous来返回一个contiguous copy;

2 维度变换后的变量是之前变量的浅拷贝,指向同一区域,即view操作会连带原来的变量一同变形,这是不合法的,所以也会报错;---- 这个解释有部分道理,也即contiguous返回了tensor的深拷贝contiguous copy数据;

参考资料

permute函数_Pytorch之contiguous函数_weixin_39626369的博客-CSDN博客//讲得贼拉好

pytorch中contiguous()_小妖精Fsky的博客-CSDN博客_pytorch中contiguous//讲得贼拉好

Pytorch view() permute() contiguous() transpose()_我是天才很好的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_43332715/article/details/124749348