CNN经典网络模型(二):AlexNet简介及代码实现(PyTorch超详细注释版)

目录

一. 开发背景

二. 网络结构

三. 模型特点

四. 代码实现

五. 参考内容

六. 代码及数据集下载


一. 开发背景

AlexNet由Hinton和他的学生Alex Krizhevsky设计,模型名字来源于论文第一作者的姓名Alex。该模型以很大的优势获得了2012年ISLVRC竞赛的冠军网络,分类准确率由传统的 70%+提升到 80%+,自那年之后,深度学习开始迅速发展。

ImageNet是一个在2009年创建的图像数据集,从2010年开始到2017年举办了七届的ImageNet 挑战赛——ImageNet Large Scale Visual Recognition ChallengeI (LSVRC),在这个挑战赛上诞生了AlexNet、ZFNet、OverFeat、VGG、Inception、ResNet、WideResNet、FractalNet、DenseNet、ResNeXt、DPN、SENet 等经典模型。

二. 网络结构

Alexnet模型为8层深度网络,由5个卷积层和3个全连接层构成,不计LRN层和池化层。AlexNet 跟 LeNet 结构类似,但使用了更多的卷积层和更大的参数空间来拟合大规模数据集 ImageNet。它是浅层神经网络和深度神经网络的分界线,如下图所示:

 网络详解:AlexNet网络结构详解(含各层维度大小计算过程)与PyTorch实现

三. 模型特点

  1. 使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算;
  2. 使用大数据训练,是百万级ImageNet图像数据,提升算法的准确率,避免过拟合;
  3. 使用ReLU作为激活函数,解决了SIgmoid在网络较深时的梯度消失问题,使收敛更快;
  4. 使用随机丢弃技术(dropout)以0.5的概率选择性地将隐藏层神经元的输出设置为零,以这种方式“dropped out”的神经元既不参与前向传播,也不参与反向传播,避免模型的过拟合;
  5. 重叠最大池化(overlapping max pooling),池化的步长小于核尺寸,使得输出之间会有重叠和覆盖,提升了特征的丰富性,并且避免平均池化的模糊化效果;
  6. 使用 LRN 局部响应归一化(Local Response Normalization)层,对局部神经元的活动创建竞争机制,使得响应较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力,使准确率更高;
  7. 进行数据增强,随机从256*256的原始图像中截取224*224大小的区域(以及水平翻转的镜像),相当于增强了(256-224)*(256-224)*2=2048倍的数据量,减轻过拟合,提升泛化能力。  

为什么Dropout有效?

Dropout背后理念和集成模型很相似。在Drpout层,不同的神经元组合被关闭,这代表了一种不同的结构,所有这些不同的结构使用一个的子数据集并行地带权重训练,而权重总和为1。如果Dropout层有 n 个神经元,那么会形成 2n 个不同的子结构。在预测时,相当于集成这些模型并取均值。这种结构化的模型正则化技术有利于避免过拟合。Dropout有效的另外一个视点是:由于神经元是随机选择的,所以可以减少神经元之间的相互依赖,从而确保提取出相互独立的重要特征。

四. 代码实现

  • model.py :定义AlexNet网络模型
  • train.py:加载数据集并训练,计算loss和accuracy,保存训练好的网络参数
  • predict.py:用自己的数据集进行分类测试
  • spilit_data.py:划分给定的数据集为训练集和测试集

注意:代码实现没有还原两个小型GPU同时运算的设计特点,而是在一个模型中运行

1. model.py

# 导入pytorch库
import torch
# 导入torch.nn模块
from torch import nn
# nn.functional:(一般引入后改名为F)有各种功能组件的函数实现,如:F.conv2d
import torch.nn.functional as F

# 定义AlexNet网络模型
# MyLeNet5(子类)继承nn.Module(父类)
03-11
### AlexNet概述 AlexNet是一种深度卷积神经网络,在2012年的ImageNet大规模视觉识别挑战赛(ILSVRC)上取得了显著的成绩[^1]。该模型由Alex Krizhevsky, Ilya Sutskever 和 Geoffrey E. Hinton设计。 ### 架构特点 AlexNet包含了八层带有参数的学习层——五层卷积层和三层全连接层。输入图像尺寸为227×227像素,经过一系列操作最终映射到1000类标签的概率分布上。为了加速训练过程并减少过拟合风险,采用了ReLU激活函数以及Dropout技术来随机丢弃部分节点[^1]。 ```python import torch.nn as nn class AlexNet(nn.Module): def __init__(self, num_classes=1000): 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), # 更多卷积层... ) 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): x = self.features(x) x = x.view(x.size(0), 256 * 6 * 6) x = self.classifier(x) return x ``` ### 实现方式 在实现方面,AlexNet利用GPU的强大计算能力进行了高效的矩阵运算处理。通过使用CUDA库可以在NVIDIA图形处理器上获得更快的速度提升。此外还应用了数据增强方法如水平翻转和平移裁剪等手段扩充训练集规模以提高泛化性能[^1]。 ### 应用场景 作为早期成功的CNN之一,AlexNet被广泛应用于各种计算机视觉任务当中,比如物体检测、分类、分割等领域。它不仅推动了深度学习领域的发展,也为后续更先进的模型提供了宝贵的经验和技术基础[^1]。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

华科附小第一名

您的支持对我的前行很重要!

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

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

打赏作者

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

抵扣说明:

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

余额充值