x.view(x.size(0), -1)的解释

pytorch教程中,用cnn实现mnist的分类。其中class中有一段代码:

def forward(self, x):
    x = self.conv1(x)
    x = self.conv2(x)
    # t = x.size(0)  0->50,1->32,2->7,3->7
    x = x.view(x.size(0), -1)           # flatten the output of conv2 to (batch_size, 32 * 7 * 7)
    output = self.out(x)
    return output, x    # return x for visualization

x.view(x.size(0), -1)这句话是说将第二次卷积的输出拉伸为一行,这句代码中的上一句中x的执行结果为:50*32*7*7个数

x.view(x.size(0), -1)的解释_第1张图片

其中,50代表的是批次训练是选取的批量数BATCH_SIZE,每次选择50个数进行训练。32代表的是out_channels,7*7代表的是每张图像处理之后的尺度。由于stride=1,所以28*28的图像第一次卷积之后大小为14*14,大二次卷积之后大小为7*7.

这样,将每个批次中的每一个输入都拉成一个维度,这样50个输入就有50*(32*7*7)的输出即50*1568,这样就实现了将784个点扩展为了1568个点,经过全链接再将这1568个点映射成为10个类别。就实现了数字的分类。

x.view(x.size(0), -1)的解释_第2张图片

x.view(x.size(0), -1)的解释_第3张图片

 

你可能感兴趣的:(Pytorch)