AlexNet学习笔记(再次进行cifar10数据分类)

网络结构

网络结构如图所示,包含5个卷积层和3个全连接层。其中,有3个卷积层进行了最大池化。
AlexNet学习笔记(再次进行cifar10数据分类)_第1张图片
AlexNet各层组织结构如表所示,其中conv表示卷积运算操作,ReLU表示校正线性单元,pool表示池化操作,norm表示局部响应归一化,dropout表示丢失输出操作,IP表示全连接。
AlexNet学习笔记(再次进行cifar10数据分类)_第2张图片
根据AlexNet结构搭建网络,代码如下:

from torch import nn

class AlexNet(nn.Module):
    def __init__(self):
        super().__init__()

        self.conv1 = nn.Sequential(
            # nn.Conv2d(3, 96,kernel_size=11,stride=4),
            nn.Conv2d(3, 6,
                      kernel_size=3,
                      stride=1),
            nn.ReLU(),
            nn.MaxPool2d(2, 2))

        self.conv2 = nn.Sequential(
            nn.Conv2d(6, 16,
                      kernel_size=3,
                      stride=1),
            nn.ReLU(),
            nn.MaxPool2d(3, 2))

        self.conv3 = nn.Sequential(
            nn.Conv2d(16, 64,
                      kernel_size=3,
                      stride=1, padding=1),
            nn.ReLU())

        self.conv4 = nn.Sequential(
            nn.Conv2d(64, 128,
                      kernel_size=3,
                      stride=1),
            nn.ReLU())

        self.conv5 = nn.Sequential(
            nn.Conv2d(128, 256,
                      kernel_size=3,
                      stride=1),
            nn.ReLU(),
            nn.MaxPool2d(
                2,
                2))

        self.fc6 = nn.Sequential(
            nn.Linear(
                256 * 1 * 1,
                120),
            nn.ReLU(),
            nn.Dropout(0.5))

        self.fc7 = nn.Sequential(
            nn.Linear(120, 84),
            nn.ReLU(),
            nn.Dropout(0.5))

        self.fc8 = nn.Linear(84, 10)

    def forward(self, x):           # 输入为[4,3,32,32]
        x = self.conv1(x)            # [4,6,15,15]
        x = self.conv2(x)            # [4,16,6,6]
        x = self.conv3(x)            # [4,64,6,6]
        x = self.conv4(x)            # [4,128,4,4]
        x = self.conv5(x)            # [4,256,1,1]

        x = x.view(x.shape[0], -1)
        x = self.fc6(x)
        x = self.fc7(x)
        x = self.fc8(x)
        return x

在训练过程中发现,在训练到第19个epoch后,loss不下降并且开始上升
AlexNet学习笔记(再次进行cifar10数据分类)_第3张图片
将网络卷积层特征图的数量变多,在训练20轮发现,loss下降至0.4左右,准确率在70%左右。
AlexNet学习笔记(再次进行cifar10数据分类)_第4张图片
AlexNet学习笔记(再次进行cifar10数据分类)_第5张图片

你可能感兴趣的:(卷积神经网络)