让我们举一些例子,从简到难。
-
view
方法返回张量与self
张量相同的数据(这意味着返回的张量具有相同数量的元素),但具有不同的形状。例如:a = torch.arange(1, 17) # a's shape is (16,) a.view(4, 4) # output below 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [torch.FloatTensor of size 4x4] a.view(2, 2, 4) # output below (0 ,.,.) = 1 2 3 4 5 6 7 8 (1 ,.,.) = 9 10 11 12 13 14 15 16 [torch.FloatTensor of size 2x2x4]
-
假设
-1
不是其中一个参数,当将它们相乘时,结果必须等于张量中的元素数。如果您执行:a.view(3, 3)
,它将引发RuntimeError
,因为对于具有16个元素的输入,形状(3 x 3)无效。换句话说:3 x 3不等于16但是9。 -
您可以使用
-1
作为传递给函数的参数之一,但只能使用一次。所发生的事情是该方法将自动计算维度。例如,a.view(2, -1, 4)
等同于a.view(2, 2, 4)
。 [16 /(2 x 4)= 2] -
特别请注意,返回的张量共享相同的数据。如果您相对"view"中进行更改,则需要更改原始张量数据:
b = a.view(4, 4) b[0, 2] = 2 a[2] == 3.0 False