gpt4 book ai didi

pytorch - 在 PyTorch 中,是什么让张量具有非连续内存?

转载 作者:行者123 更新时间:2023-12-03 21:20:51 26 4
gpt4 key购买 nike

根据 this SOthis PyTorch discussion , PyTorch 的 view函数仅适用于连续内存,而 reshape才不是。在第二个链接中,作者甚至声称:

[view] will raise an error on a non-contiguous tensor.



但是张量什么时候有不连续的内存呢?

最佳答案

This是一个很好的答案,它在 NumPy 的上下文中解释了该主题。 PyTorch 的工作原理基本相同。它的文档一般不会提到函数输出是否是(非)连续的,但这是可以根据操作的类型来猜测的(有一些经验和对实现的理解)。根据经验,大多数操作在构造新张量时会保持连续性。如果操作就地在数组上工作并更改其跨步,您可能会看到不连续的输出。下面举几个例子

import torch

t = torch.randn(10, 10)

def check(ten):
print(ten.is_contiguous())

check(t) # True

# flip sets the stride to negative, but element j is still adjacent to
# element i, so it is contiguous
check(torch.flip(t, (0,))) # True

# if we take every 2nd element, adjacent elements in the resulting array
# are not adjacent in the input array
check(t[::2]) # False

# if we transpose, we lose contiguity, as in case of NumPy
check(t.transpose(0, 1)) # False

# if we transpose twice, we first lose and then regain contiguity
check(t.transpose(0, 1).transpose(0, 1)) # True

一般来说,如果你有不连续的张量 t ,您可以通过调用 t = t.contiguous() 使其连续.如 t是连续的,请调用 t.contiguous()本质上是一个空操作,因此您可以这样做而不会冒性能受到很大影响的风险。

关于pytorch - 在 PyTorch 中,是什么让张量具有非连续内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54095351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com