如何理解 torch.arange(0, 3).view(-1, *[1]*3)
How to understand torch.arange(0, 3).view(-1, *[1]*3)
在 Pytorch 中,对于代码:
torch.arange(0, 3).view(-1, *[1]*3)
结果是:
tensor([[[[0]]],
[[[1]]],
[[[2]]]])
torch.Size([3, 1, 1, 1])
其中[1] * 3 = [1, 1, 1],但是我不明白[1] * 3前面的*是什么意思?谢谢
虽然评论中提供的链接描述了解决方案的一部分,但可能缺少全部内容,因此,让我们理清这个 view
方法:
.view(-1,...)
表示“所有元素”,在你的例子中它是 3,因为你有 [0, 1, 2]
,长度为 3。
下一个:
[1] * 3
是一个 Python 技巧,可以创建单个元素重复多次的新列表。
与
相同
[1, 1, 1]
现在用星号解包将值作为函数的参数“解包”,在这种情况下:
.view(-1, [1, 1, 1])
变为:
.view(-1, 1, 1, 1)
整个事情是(根据第一步):
.view(3, 1, 1, 1)
顺便说一句。请不要在大多数情况下这样做,如上所示,很难遵循。
在 Pytorch 中,对于代码:
torch.arange(0, 3).view(-1, *[1]*3)
结果是:
tensor([[[[0]]],
[[[1]]],
[[[2]]]])
torch.Size([3, 1, 1, 1])
其中[1] * 3 = [1, 1, 1],但是我不明白[1] * 3前面的*是什么意思?谢谢
虽然评论中提供的链接描述了解决方案的一部分,但可能缺少全部内容,因此,让我们理清这个 view
方法:
.view(-1,...)
表示“所有元素”,在你的例子中它是 3,因为你有 [0, 1, 2]
,长度为 3。
下一个:
[1] * 3
是一个 Python 技巧,可以创建单个元素重复多次的新列表。
与
相同[1, 1, 1]
现在用星号解包将值作为函数的参数“解包”,在这种情况下:
.view(-1, [1, 1, 1])
变为:
.view(-1, 1, 1, 1)
整个事情是(根据第一步):
.view(3, 1, 1, 1)
顺便说一句。请不要在大多数情况下这样做,如上所示,很难遵循。