「深度学习一遍过」必修9:解读卷积神经网络alexnet(代码片段)

荣仔!最靓的仔! 荣仔!最靓的仔!     2022-12-15     727

关键词:

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

目录

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

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


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

「深度学习一遍过」必修2:解读简化版模型代码(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇目录1总观整体代码2代码细致解读2.1训练2.1.1导入库2.1.2加载数据集2.1.3定义数据加载器 2.1.4创建模型​ ... 查看详情

「深度学习一遍过」必修14:基于pytorch研究深度可分离卷积与正常卷积的性能差异(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇   目录1正常卷积2深度可分离卷积 3性能比较1正常卷积以某二分类问题为例核心代码 classsimpleconv3(nn.M... 查看详情

「深度学习一遍过」必修26:机器学习与深度学习基础知识汇总

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录1Boosting与Bagging2卷积层、激活层、池化层作用3卷积神经网络特性4正则化相关知识5评测指标相关知... 查看详情

「深度学习一遍过」必修26:机器学习与深度学习基础知识汇总

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录1Boosting与Bagging2卷积层、激活层、池化层作用3卷积神经网络特性4正则化相关知识5评测指标相关知... 查看详情

「深度学习一遍过」必修18:基于pytorch的语义分割模型实现(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录1自定义5层普通卷积 2实现Unet模型结构 3在Unet网络模型基础上实现膨胀卷积 1自定义5层普通卷积... 查看详情

「深度学习一遍过」必修26:机器学习与深度学习基础知识汇总

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录1Boosting与Bagging2卷积层、激活层、池化层作用3卷积神经网络特性4正则化相关知识5评测指标相关知... 查看详情

「深度学习一遍过」必修13:使用pytorch对inception结构模型进行设计(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇  目录1基准模型2替换第2个卷积为Inception结构(conv2)3替换第3个卷积为Inception结构(c 查看详情

「深度学习一遍过」必修10:pytorch框架的使用(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇目录1 Tensor生成2 Tensor基本操作形状查看形状更改增加维度压缩维度3 Tensor其他操作4 Pytorch网络定义与... 查看详情

「深度学习一遍过」必修15:pytorch模型分析(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇   目录1Pytorch模型结构分析1.1工具1:pytorch-summary1.2 工具2:Netron1.3工具3 查看详情

「深度学习一遍过」必修25:基于dcgan的imageproduction(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录项目GitHub地址项目心得项目代码   项目GitHub地址Classic_model_examples/2016_DCGAN_ImageProduc 查看详情

「深度学习一遍过」必修24:基于unet的semanticsegmentation(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录项目GitHub地址项目心得项目代码 项目GitHub地址Classic_model_examples/2015_UNet_SemanticSegmen 查看详情

「深度学习一遍过」必修16:tensorboard与transforms(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇    目录1 Tensorboard1.1初始化 1.2使用实例1.2.1画一条直线1.2.2查看一张图片1.2.3滑动查看多张图片2Transfo... 查看详情

「深度学习一遍过」必修6:利用迁移学习快速提升模型性能(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇目录1迁移学习如何提升模型性能2代码详解(以resnet18与训练模型为例)2.1加载ResNet182.2修改模型... 查看详情

「深度学习一遍过」必修7:模型训练验证与可视化(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇目录1CreateDataset1.1生成训练集和测试集1.2生成验证集2模型训练 2.1 都进行微调2.2只微调最后2.3从头开始... 查看详情

「深度学习一遍过」必修17:基于pytorch细粒度分类实战(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录1实战内容简介2数据集读取2.1dataset2.2dataloader3模型搭建3.1基准模型3.2与基准模型相对应的双线性模... 查看详情

「深度学习一遍过」必修20:基于alexnet的mnist手写数字识别(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录项目GitHub地址项目心得项目代码 项目GitHub地址Classic_model_examples/2012_AlexNet_MNISTatmain 查看详情

「深度学习一遍过」必修22:基于googlenet的mnist手写数字识别(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录项目GitHub地址项目心得项目代码 项目GitHub地址Classic_model_examples/2014_GoogLeNet_MNISTatma 查看详情

「深度学习一遍过」必修22:基于googlenet的mnist手写数字识别(代码片段)

...于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇 目录项目GitHub地址项目心得项目代码 项目GitHub地址Classic_model_examples/2014_GoogLeNet_MNISTatma 查看详情