所以我很难理解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文档中找不到任何专门讨论它的内容
当指定张量的维度作为函数的参数时(例如
m = torch.nn.LogSoftmax(dim=1)
),您可以使用正向维度索引,第一个维度从0开始,第二个维度从1开始,以此类推。或者,您可以使用负维度索引从最后一个维度开始到第一个维度:-1表示最后一个维度,-2表示最后一个维度的第二个维度等
示例:
如果你有一个四维张量
b
-by-c
-by-h
-by-w
,那么dim=0
或dim=-4
访问李>dim=1
或dim=-3
访问李>dim=2
或dim=-2
访问李>dim=3
或dim=-1
访问李>因此,如果您有一个4D张量
dim
,参数可以取值范围[-4, 3]
在您的例子中,您有一个1D张量,因此
dim
参数可以是威瑟尔0或-1(在这个不推荐的例子中,这相当于相同的维度)相关问题 更多 >
编程相关推荐