pytorch 张量步幅 - 它是如何工作的

Aer*_*rin 7 numpy stride pytorch tensor

PyTorch 似乎没有tensor.stride(). 有人可以确认我的理解吗?

我的问题有三个。

  1. Stride 用于访问存储中的元素。因此步幅大小将与张量的维度相同。正确的?

  2. 对于每个维度,stride 的相应元素表示沿着一维存储移动需要多少距离。正确的?

例如:

In [15]: x = torch.arange(1,25)

In [16]: x
Out[16]:
tensor([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18
, 19, 20, 21, 22, 23, 24])

In [17]: a = x.view(4,3,2)

In [18]: a
Out[18]:
tensor([[[ 1,  2],
         [ 3,  4],
         [ 5,  6]],

        [[ 7,  8],
         [ 9, 10],
         [11, 12]],

        [[13, 14],
         [15, 16],
         [17, 18]],

        [[19, 20],
         [21, 22],
         [23, 24]]])

In [20]: a.stride()
Out[20]: (6, 2, 1)
Run Code Online (Sandbox Code Playgroud)
  1. 拥有这些信息如何帮助有效地执行张量运算?基本上这显示了内存布局。那么它有什么帮助呢?