Pytorch中张量的连续性:contiguous

发布时间 2023-06-05 11:56:11作者: stardsd

根据PyTorch文档¹,t.contiguous()返回一个包含与t张量相同数据的连续张量。如果t张量已经是连续的,这个函数返回t张量本身。


一个张量是连续的,如果张量中的相邻元素在内存中实际上是相邻的³。有些对张量的操作,例如transpose()permute()view()narrow(),不改变张量的内容,但改变数据的组织方式²。例如,当你调用transpose()时,PyTorch不会生成一个具有新布局的新张量,它只是修改张量对象中的元信息,使偏移量和步长描述所需的新形状²。


有些PyTorch函数期望一个连续的张量作为输入,并且如果它们收到一个非连续的张量,可能会引发一个RuntimeError: input is not contiguous²。在这种情况下,你可以使用t.contiguous()来制作一个张量的副本,使其元素在内存中的顺序与用相同数据从头创建它时相同²。


Source:
(1) torch.Tensor.contiguous — PyTorch 2.0 documentation. https://pytorch.org/docs/stable/generated/torch.Tensor.contiguous.html.
(2) In PyTorch, what makes a tensor have non-contiguous memory?. https://stackoverflow.com/questions/54095351/in-pytorch-what-makes-a-tensor-have-non-contiguous-memory.
(3) What does .contiguous () do in PyTorch? - Stack Overflow. https://stackoverflow.com/questions/48915810/what-does-contiguous-do-in-pytorch.
(4) torch.contiguous()方法_it_lsr的博客-CSDN博客. https://blog.csdn.net/qq_37828380/article/details/107855070.