Pytorch 中 [-1,0] 的维度范围是多少?
What is a dimensional range of [-1,0] in Pytorch?
所以我很难理解 Pytorch 中关于集合的一些术语。我将 运行 归入关于我的张量的 范围 不正确的相同类型的错误,当我尝试 Google 寻求解决方案时,解释通常更进一步令人困惑。
这是一个例子:
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([0.3300, 0.3937, -0.3113, -0.2880])
output = m(input)
我没有发现上面的代码有什么问题,我已经将我的 LogSoftmax
定义为接受一维输入。所以根据我使用其他编程语言的经验,集合 [0.3300, 0.3937, -0.3113, -0.2880]
是一个维度。
以上为 m(input)
触发了以下错误:
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
这是什么意思?
我传入了一个 一维 张量,但它告诉我它期望的范围是 [-1, 0], but got 1
.
- 什么范围?
- 为什么比较
1
和 [-1, 0]
的维度会出错?
- 两个数字
[-1, 0]
是什么意思?
我搜索了这个错误的解释,我发现像这样的东西 link 这对我这个程序员来说毫无意义:
https://github.com/pytorch/pytorch/issues/5554#issuecomment-370456868
所以我能够通过向我的张量数据添加另一个维度来修复上述代码。
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([[-0.3300, 0.3937, -0.3113, -0.2880]])
output = m(input)
这样可行,但我不明白 [-1,0]
如何解释嵌套集合。
进一步的实验表明以下方法也有效:
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([[0.0, 0.1], [1.0, 0.1], [2.0, 0.1]])
output = m(input)
所以dim=1
表示集合的集合,但我不明白[-1, 0]
是什么意思。
当我尝试使用 LogSoftmax(dim=2)
m = torch.nn.LogSoftmax(dim=2)
input = torch.tensor([[0.0, 0.1], [1.0, 0.1], [2.0, 0.1]])
output = m(input)
以上给出了以下错误:
IndexError: Dimension out of range (expected to be in range of [-2, 1], but got 2)
再次混淆 dim=2
等于 [-2, 1]
,因为 1
值从何而来?
我可以通过 嵌套 集合另一个级别来修复上面的错误,但此时我不明白 LogSoftmax
期望什么值。
m = torch.nn.LogSoftmax(dim=2)
input = torch.tensor([[[0.0, 0.1]], [[1.0, 0.1]], [[2.0, 0.1]]])
output = m(input)
我对这个术语感到非常困惑 [-1, 0]
和 [-2, 1]
?
如果第一个值是嵌套深度,那么为什么它是 负数,第二个数字是什么意思?
没有与此错误关联的错误代码。所以很难找到关于这个主题的文档。它似乎是一个 非常 常见的错误,人们对此感到困惑,而我在 Pytorch 文档中找不到专门讨论它的任何内容。
当指定张量的维度作为函数的参数时(例如 m = torch.nn.LogSoftmax(dim=1)
),您可以使用 positive 维度索引,第一个维度从 0 开始,1第二个等等
或者,您可以使用 negative 维度索引从最后一个维度开始到第一个维度:-1 表示最后一个维度,-2 表示倒数第二个维度等。
示例:
如果你有一个尺寸为 b
-by-c
-by-h
-by-w
的 4D 张量,则
- "batch" 维度(第一个)可以作为
dim=0
或 dim=-4
访问。
- "channel" 维度(第二个)可以通过
dim=1
或 dim=-3
访问。
- "height"/"vertical" 维度(第三个)可以通过
dim=2
或 dim=-2
访问。
- "width"/"horizontal" 维度(第四个)可以作为
dim=3
或 dim=-1
. 访问
因此,如果您有一个 4D 张量 dim
参数可以取 [-4, 3]
.
范围内的值
在你的例子中,你有一个一维张量,因此 dim
参数可以是 0 或 -1(在这个弃用的例子中相当于相同的维度)。
所以我很难理解 Pytorch 中关于集合的一些术语。我将 运行 归入关于我的张量的 范围 不正确的相同类型的错误,当我尝试 Google 寻求解决方案时,解释通常更进一步令人困惑。
这是一个例子:
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([0.3300, 0.3937, -0.3113, -0.2880])
output = m(input)
我没有发现上面的代码有什么问题,我已经将我的 LogSoftmax
定义为接受一维输入。所以根据我使用其他编程语言的经验,集合 [0.3300, 0.3937, -0.3113, -0.2880]
是一个维度。
以上为 m(input)
触发了以下错误:
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
这是什么意思?
我传入了一个 一维 张量,但它告诉我它期望的范围是 [-1, 0], but got 1
.
- 什么范围?
- 为什么比较
1
和[-1, 0]
的维度会出错? - 两个数字
[-1, 0]
是什么意思?
我搜索了这个错误的解释,我发现像这样的东西 link 这对我这个程序员来说毫无意义:
https://github.com/pytorch/pytorch/issues/5554#issuecomment-370456868
所以我能够通过向我的张量数据添加另一个维度来修复上述代码。
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([[-0.3300, 0.3937, -0.3113, -0.2880]])
output = m(input)
这样可行,但我不明白 [-1,0]
如何解释嵌套集合。
进一步的实验表明以下方法也有效:
m = torch.nn.LogSoftmax(dim=1)
input = torch.tensor([[0.0, 0.1], [1.0, 0.1], [2.0, 0.1]])
output = m(input)
所以dim=1
表示集合的集合,但我不明白[-1, 0]
是什么意思。
当我尝试使用 LogSoftmax(dim=2)
m = torch.nn.LogSoftmax(dim=2)
input = torch.tensor([[0.0, 0.1], [1.0, 0.1], [2.0, 0.1]])
output = m(input)
以上给出了以下错误:
IndexError: Dimension out of range (expected to be in range of [-2, 1], but got 2)
再次混淆 dim=2
等于 [-2, 1]
,因为 1
值从何而来?
我可以通过 嵌套 集合另一个级别来修复上面的错误,但此时我不明白 LogSoftmax
期望什么值。
m = torch.nn.LogSoftmax(dim=2)
input = torch.tensor([[[0.0, 0.1]], [[1.0, 0.1]], [[2.0, 0.1]]])
output = m(input)
我对这个术语感到非常困惑 [-1, 0]
和 [-2, 1]
?
如果第一个值是嵌套深度,那么为什么它是 负数,第二个数字是什么意思?
没有与此错误关联的错误代码。所以很难找到关于这个主题的文档。它似乎是一个 非常 常见的错误,人们对此感到困惑,而我在 Pytorch 文档中找不到专门讨论它的任何内容。
当指定张量的维度作为函数的参数时(例如 m = torch.nn.LogSoftmax(dim=1)
),您可以使用 positive 维度索引,第一个维度从 0 开始,1第二个等等
或者,您可以使用 negative 维度索引从最后一个维度开始到第一个维度:-1 表示最后一个维度,-2 表示倒数第二个维度等。
示例:
如果你有一个尺寸为 b
-by-c
-by-h
-by-w
的 4D 张量,则
- "batch" 维度(第一个)可以作为
dim=0
或dim=-4
访问。 - "channel" 维度(第二个)可以通过
dim=1
或dim=-3
访问。 - "height"/"vertical" 维度(第三个)可以通过
dim=2
或dim=-2
访问。 - "width"/"horizontal" 维度(第四个)可以作为
dim=3
或dim=-1
. 访问
因此,如果您有一个 4D 张量 dim
参数可以取 [-4, 3]
.
在你的例子中,你有一个一维张量,因此 dim
参数可以是 0 或 -1(在这个弃用的例子中相当于相同的维度)。