Pytork中[1,0]的尺寸范围是多少?

2024-04-27 04:36:36 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我很难理解Pytorch中有关收藏的一些术语。我不断遇到同样的错误,关于我的张量的范围不正确,当我试图用谷歌搜索解决方案时,解释往往会更加混乱

以下是一个例子:

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]进行比较时出错
  • 这两个数字是什么意思

我搜索了这个错误的解释,发现像这样的链接对我这个程序员来说毫无意义:

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文档中找不到任何专门讨论它的内容


Tags: of代码inputoutput错误rangenntorch
1条回答
网友
1楼 · 发布于 2024-04-27 04:36:36

当指定张量的维度作为函数的参数时(例如m = torch.nn.LogSoftmax(dim=1)),您可以使用正向维度索引,第一个维度从0开始,第二个维度从1开始,以此类推。
或者,您可以使用维度索引从最后一个维度开始到第一个维度:-1表示最后一个维度,-2表示最后一个维度的第二个维度等

示例:
如果你有一个四维张量b-by-c-by-h-by-w,那么

  • “批处理”维度(第一个)可以作为dim=0dim=-4访问
  • “通道”维度(第二个)可以作为dim=1dim=-3访问
  • “高度”/“垂直”维度(第三个)可以作为dim=2dim=-2访问
  • “宽度”/“水平”维度(第四个)可以作为dim=3dim=-1访问

因此,如果您有一个4D张量dim,参数可以取值范围[-4, 3]

在您的例子中,您有一个1D张量,因此dim参数可以是威瑟尔0或-1(在这个不推荐的例子中,这相当于相同的维度)

相关问题 更多 >