gpt4 book ai didi

python - layout = torch.strided 是什么意思?

转载 作者:行者123 更新时间:2023-11-28 17:59:02 25 4
gpt4 key购买 nike

在浏览 pytorch 文档时,我在许多函数中遇到了术语 layout = torch.strided。任何人都可以帮助我了解它在哪里使用以及如何使用。描述说这是返回张量的所需布局。布局是什么意思,有多少种布局?

torch.rand(*sizes, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

最佳答案

strides 是在给定维度中从一个元素转到下一个元素所需的步数(或跳跃)。在计算机内存中,数据线性存储在连续的内存块中。我们看到的只是一个(重新)呈现。

让我们举一个张量的例子来理解这一点:

# a 2D tensor
In [62]: tensor = torch.arange(1, 16).reshape(3, 5)

In [63]: tensor
Out[63]:
tensor([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])

有了这个张量,步幅为:

# get the strides
In [64]: tensor.stride()
Out[64]: (5, 1)

这个结果元组 (5, 1) 说的是:

  • 要遍历第 0th 维/轴(Y 轴),假设我们要从 16,我们应该走5步(或跳跃)
  • 要遍历第 1st 维/轴(X 轴),假设我们要从 78,我们应该走 1 步(或跳)

元组中 51 的顺序(或索引)表示维度/轴。您还可以将需要步幅的维度作为参数传递:

# get stride for axis 0
In [65]: tensor.stride(0)
Out[65]: 5

# get stride for axis 1
In [66]: tensor.stride(1)
Out[66]: 1

有了这种理解,我们可能不得不问为什么在创建张量时需要这个额外参数?答案是出于效率原因。 (我们如何最有效地存储/读取/访问(稀疏)张量中的元素?)。

使用稀疏张量(大多数元素都为零的张量),所以我们不想存储这些值。我们只存储非零值及其索引。有了所需的形状,其余的值就可以用零填充,从而产生所需的稀疏张量。


要进一步阅读,以下文章可能会有所帮助:


P.S:我猜 torch.layout 文档中有一个拼写错误

Strides are a list of integers ...

tensor.stride() 返回的复合数据类型是元组,不是列表。

关于python - layout = torch.strided 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56659255/

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