Pytorch - 基本"前进"中的命令的含义通过

时间:2018-06-09 19:16:56

标签: pytorch

我是Pytorch的新手,如果有人能够帮助我理解以下内容(并且如果我错了就纠正我),将会很高兴,关于命令x.view在Pytorch中的含义first tutorial ,一般来说,卷积层的输入和完全连接层的输入:

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

据我所知,卷积层的输入256X256图像以其2D形式插入(即 - 256X256矩阵,或者在彩色图像的情况下为256X256X3)。然而,当我们将图像插入到完全连接的线性层时,我们需要首先将2D图像重塑为1D矢量(我是对的吗?这一般也是如此(或仅在Pytorch中)?)。这是为什么我们在将x插入完全连接的层之前使用命令“x = x.view(-1,16 * 5 * 5)”?

如果输入图像x为3D(例如256X256X256),上面给出的“前向”功能的语法是否保持不变?

提前多多感谢

1 个答案:

答案 0 :(得分:2)

来自Petteri Nevavuori的讲义,并展示了如何使用内核I从图像K生成要素图。对于内核的每次应用,计算点积,实际上是IK大小区域中KI之间的元素乘法的总和

enter image description here

你可以说内核寻找对角线特征。然后它搜索图像并在左下角找到完美匹配的特征。否则,内核只能识别它所寻找的特征的部分。这就是为什么该产品被称为特征映射,因为它告诉内核能够在应用它的图像的任何位置识别特征。

答案改编自:https://discuss.pytorch.org/t/convolution-input-and-output-channels/10205/3

我们假设我们考虑输入图像的形状(W x H x 3),其中输入音量有3个通道(RGB图像)。现在我们想为此图片创建ConvLayer

ConvLayer中的每个内核都将使用输入卷的所有输入通道。我们假设我们想使用3 by 3内核。这个内核将有27个权重和1个偏差参数,因为(W * H * input_Channels = 3 * 3 * 3 = 27个权重)。

输出通道的数量是ConvLayer中使用的不同内核的数量。如果我们想输出64个通道,我们需要定义ConvLayer,使其使用64个不同的3x3内核。

如果您查看Conv2d的文档,我们可以定义一个模仿以上场景的ConvLayer,如下所示。

nn.Conv2d(3, 64, 3, stride=1)

其中in_channels = 3,out_channels = 64,kernel_size = 3x3。查看文档中的步骤。

如果查看Linear图层的实现,您会看到线性操作模拟的基础数学方程式为:y = Ax + b

根据linear图层的pytorch文档,我们可以看到它需要输入形状(N,∗,in_features),输出形状为(N,∗,out_features)。因此,在您的情况下,如果输入图像x的形状为256 x 256 x 256,并且您希望将所有(256 * 256 * 256)要素转换为特定数量的要素,则可以定义线性层为:

llayer = nn.Linear(256*256*256, num_features)
相关问题