小编典典

PyTorch中的“视图”方法如何工作?

python

view()对以下代码片段中的方法感到困惑。

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool  = nn.MaxPool2d(2,2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1   = nn.Linear(16*5*5, 120)
        self.fc2   = nn.Linear(120, 84)
        self.fc3   = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16*5*5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

net = Net()

我的困惑是关于以下几行。

x = x.view(-1, 16*5*5)

tensor.view()函数有什么作用?我已经在很多地方看到了它的用法,但是我不明白它是如何解释其参数的。

如果我给view()函数赋负值作为参数会怎样?例如,如果我打电话给我tensor_variable.view(1, 1, -1)怎么办?

谁能view()举例说明功能的主要原理?


阅读 221

收藏
2020-12-20

共1个答案

小编典典

视图功能旨在重塑张量。

说你有张量

import torch
a = torch.range(1, 16)

a是具有1到16(包括)的16个元素的张量。如果要重塑此张量以使其成为4 x 4张量,则可以使用

a = a.view(4, 4)

现在a将是4 x 4张量。 请注意,在重塑后,元素总数必须保持不变。 重塑张a3 x 5张量是不恰当的。

参数-1是什么意思?

如果在某些情况下您不知道要多少行,但是确定了列数,则可以将其指定为-1。( 请注意,您可以将其扩展到具有更大尺寸的张量。只有一个轴值可以为-1
)。这是一种告诉库的方法:“给我一个具有这么多列的张量,然后您就可以计算出实现此目的所需的适当行数”。

可以在上面给出的神经网络代码中看到。在x = self.pool(F.relu(self.conv2(x)))前进功能中的线之后,您将具有16深度特征图。您必须将其展平以将其分配给完全连接的层。因此,您告诉pytorch重塑所获得的张量,使其具有特定的列数,并告诉它自己决定行数。

在numpy和pytorch之间绘制相似之处,view类似于numpy的重塑功能。

2020-12-20