Pytorch-基本命令中命令的含义;“前进”;通过

Pytorch-基本命令中命令的含义;“前进”;通过,pytorch,Pytorch,我是Pytorch的新手,如果有人能帮助我理解以下内容(如果我错了,请纠正我),我会很高兴,关于Pytorch中命令x.view的含义,以及一般关于卷积层的输入和完全连接层的输入: 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(

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

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图像重塑为一维向量(我说的对吗?这在一般情况下是否也是正确的(或者仅在Pytorch中)?)。这就是为什么我们在将x插入完全连接的层之前使用命令“x=x.view(-1,16*5*5)”的原因吗

如果输入图像x为3D(例如256X256X256),上述“前进”函数的语法是否保持不变


提前感谢

这是Petteri Nevavuori的课堂讲稿,展示了如何从带有内核
K
的图像
I
生成特征图。对于内核的每个应用程序,都会计算一个点积,它实际上是
I
K
之间
K
大小的
I
区域内元素相乘的总和

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

答复摘自:


我们假设一个输入图像的形状(<代码> W x H x 3 < /代码>),其中输入量有3个通道(RGB图像)。现在我们想为这个图像创建一个

ConvLayer

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

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

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

nn.Conv2d(3, 64, 3, stride=1)
其中in_通道=3,out_通道=64,内核_大小=3x3。查看文档中的步骤


如果您查看层的实现,您将看到线性操作模拟的基本数学方程:
y=Ax+b

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

llayer = nn.Linear(256*256*256, num_features)

是的,如果你是正确的,mlp通常是由一个一维图像提供的,第一维实际上代表批次中的样本数量。通常,视图相当于numpy中的“重塑”。对于3d的情况,你会做x=x.view(-1256*256*256)非常感谢克里斯!非常感谢瓦西·艾哈迈德!