「深度学习一遍过」必修9:解读卷积神经网络 AlexNet
Posted 荣仔!最靓的仔!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「深度学习一遍过」必修9:解读卷积神经网络 AlexNet相关的知识,希望对你有一定的参考价值。
本专栏用于记录关于深度学习的笔记,不光方便自己复习与查阅,同时也希望能给您解决一些关于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。
专栏地址:「深度学习一遍过」必修篇
目录
2.1 通过 torchvision.models 导入 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 代码解读
2.1 通过 torchvision.models 导入 AlexNet
from torchvision.models import AlexNet
2.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
以上是关于「深度学习一遍过」必修9:解读卷积神经网络 AlexNet的主要内容,如果未能解决你的问题,请参考以下文章
「深度学习一遍过」必修14:基于pytorch研究深度可分离卷积与正常卷积的性能差异