「深度学习一遍过」必修9:解读卷积神经网络 AlexNet

本专栏用于记录关于深度学习的笔记,不光方便自己复习与查阅,同时也希望能给您解决一些关于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。
专栏地址:「深度学习一遍过」必修篇

目录

1 AlexNet 模型解读

1.1 AlexNet 模型特点

1.2 AlexNet 模型结构

1.2.1 卷积层1

1.2.2 卷积层2

1.2.3 卷积层3

1.2.4 卷积层4

1.2.5 卷积层5

1.2.6 全连接6

1.2.7 全连接7

1.2.8 全连接8

2 AlexNet工程技巧

3 代码解读

3.1 通过 torchvision.models 导入 AlexNet

3.2 Ctrl + 鼠标左键进入 AlexNet 源码


AlexNet 模型解读

1.1 AlexNet 模型特点

AlexNet 论文的特点如下:
  • 更深的网络结构
  • 使用层叠的卷积层,即卷积层+卷积层+池化层来提取图像的特征
  • 使用 Dropout 抑制过拟合
  • 使用数据增强 Data Augmentation 抑制过拟合
  • 使用 Relu 替换之前的 sigmoid 的作为激活函数
  • 使用多 GPU 进行训练

1.2 AlexNet 模型结构

AlexNet 网络结构如下:

1.2.1 卷积层1

输入图像大小:277\times 277\times 3

  • 卷积核大小:11\times 11
  • 数量:48 个
  • 步长:4
  • 激活函数:relu
  • 两台 GPU 同时训练,即共 96 个核
    输出特征图大小:(227-11)/4+1=55,即 55\times 55\times 96

池化:kernel  size=3stride=2

  • 输出特征图大小:(55-3)/2+1=27,即 27\times 27\times 96

标准化

1.2.2 卷积层2

输入图像大小:27\times 27\times 96

  • 卷积核大小:5\times 5
  • 数量:128 个
  • 步长:1
  • 激活函数:relu
  • 输出特征图像先扩展 2 个像素,即大小 31\times 31
    输出特征图大小:(31-5)/1+1=27,即 27\times 27\times 256

池化:kernel  size=3stride=2

  • 输出特征图大小:(27-3)/2+1=13,即 13\times 13\times 256

标准化 

1.2.3 卷积层3

 输入图像大小:13\times 13\times 256   

  • 卷积核大小:3\times 3
  • 数量:192 个
  • 步长:1
  • 激活函数:relu
  • 输出特征图像先扩展 1 个像素,即大小 15\times 15
    输出特征图大小:(15-3)/1+1=13,即 13\times 13\times 384

1.2.4 卷积层4

 输入图像大小:13\times 13\times 384      

  • 卷积核大小:3\times 3
  • 数量:192 个
  • 步长:1
  • 激活函数:relu
  • 输出特征图像先扩展 1 个像素,即大小 15\times 15
    输出特征图大小:(15-3)/1+1=13,即 13\times 13\times 384  

1.2.5 卷积层5

 输入图像大小:13\times 13\times 384       

  • 卷积核大小:3\times 3
  • 数量:128 个
  • 步长:1
  • 激活函数:relu
  • 输出特征图像先扩展 1 个像素,即大小 15\times 15
    输出特征图大小:(15-3)/1+1=13,即 13\times 13\times 256  

池化:kernel  size=3stride=2

  • 输出特征图大小:(13-3)/2+1=6,即 6\times 6\times 256  

1.2.6 全连接6

  • 输入图像大小:6\times 6\times 256
  • 共 4096 个神经元
  • dropout
  • 输出 4096\times 1 个向量 

1.2.7 全连接7

  • 输入图像大小:4096\times 1
  • 共 4096 个神经元
  • dropout
  • 输出 4096\times 1 个向量 

1.2.8 全连接8

  • 输入图像大小:4096\times 1
  • 共 1000 个神经元
  • dropout
  • 输出 1000\times 1 个向量 

Dropout 也可以看成是一种模型组合,每次生成的网络结构都不一样,通过组合多个模型的方式能够有效地减少过拟合

2 AlexNet工程技巧

多 GPU 训练,ReLU 激活函数,LRN 归一化,Dropout 正则化,重叠池化,数据增强 

  • Dropout,防止过拟合,提高泛化能力
  • 重叠池化(overlapping),更有利于减轻过拟合
  • 裁剪翻转等数据增强策略,提高模型泛化能力
  • 多 GPU 训练,尽量使用更多特征图,并减少计算量
  • LRN 归一化,抑制反馈较小的神经元,放大反馈较大的神经元,增强模型泛化能力
  • ReLU 激活函数,加快模型收敛

3 代码解读

3.1 通过 torchvision.models 导入 AlexNet

from torchvision.models import AlexNet

3.2 Ctrl + 鼠标左键进入 AlexNet 源码

class AlexNet(nn.Module):

    def __init__(self, num_classes: int = 1000) -> None:
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
        self.classifier = nn.Sequential(
            nn.Dropout(),
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, num_classes),
        )

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        x = self.features(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.classifier(x)
        return x

卷积层 1

卷积层2

卷积层3、卷积层4、卷积层5

全连接层6、全连接层7、全连接层8

欢迎大家交流评论,一起学习

希望本文能帮助您解决您在这方面遇到的问题

感谢阅读
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣仔!最靓的仔!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值