实现一个简单的的神经网络(二)---构建CNN网络

实现一个简单的的神经网络(二)—构建CNN网络

3. 构建一个CNN

class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Sequential(         #输入大小(1, 28, 28)
            nn.Conv2d(                      
                in_channels=1,               #(这一项为输入)MNIST数据集是单通道的灰度图,所以为1
                out_channels=16,             #(,这一项为输出,16个卷积核得到16个特征图)要得到多少个特征图
                kernel_size=5,              #卷积核的大小(5*5)
                stride=1,                   #步长
                padding=2,                  #如果希望卷积后大小跟原来一样,需要设置padding=(kernel_size-1)/2 if stride=1
            ),                              #输出的特征图为(16, 28, 28)
            nn.ReLU(),                      #relu层
            nn.MaxPool2d(kernel_size=2),    #进行池化操作(2x2区域),输出结果为:(16,14, 14)
        )
        self.conv2 = nn.Sequential(         #下一个套餐的输入(16, 14, 14)
            nn.Conv2d(16, 32, 5, 1, 2),     #(16为当前卷积层输入大小,为上一层的输出大小)输出(32, 14, 14)
            nn.ReLU(),                      #relu层
            nn.MaxPool2d(2),                #输出(32, 7, 7)
        )
        self.out = nn.Linear(32 * 7 * 7, 10)#全连接层得到的结果
        
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = x.view(x.size(0), -1)           #flatten操作,结果为:(batch_size, 32*7*7),为了全连接层能用上
        output = self.out(x)
        return output
经验分享 程序员 微信小程序 职场和发展