当前位置: 首页 > news >正文

CNN卷积神经网络之LeNet和AlexNet经典网络模型(三)

CNN卷积神经网络之LeNet和AlexNet经典网络模型(三)

文章目录

  • CNN卷积神经网络之LeNet和AlexNet经典网络模型(三)
  • 深度学习两大经典 CNN 模型速览
    • 1. LeNet-5:CNN 的开山之作(1998)
    • 2. AlexNet:深度学习里程碑(2012)
    • 3. 核心差异对比
    • 4. 可一键运行的 PyTorch 实现
      • 4.1 LeNet-5(MNIST)
      • 4.2 AlexNet(ImageNet 简化版,可在 CIFAR-10 上跑通)
    • 5. 小结 & 面试高频问答


深度学习两大经典 CNN 模型速览

LeNet-5(1998)与 AlexNet(2012)——从 32×32 灰度手写数字到 224×224 彩色 ImageNet 的跨越


1. LeNet-5:CNN 的开山之作(1998)

1998年Yann LeCun等提出LeNets5 ,是第一个成功应用于手写数字识别问题并产生实际商业(邮政行业)价值的卷积神经网络
在这里插入图片描述

关键词要点
任务MNIST 手写数字识别
输入1×32×32 灰度图
结构7 层:C1(6@28×28) → S2 → C3(16@10×10) → S4 → C5(120@1×1) → F6(84) → Output(10)
卷积核5×5
池化2×2 平均池化
激活Sigmoid(历史版本)
参数量≈ 60 k
创新首次将 BP-CNN 成功用于商业(USPS 邮编)

整体网络解读
在这里插入图片描述


2. AlexNet:深度学习里程碑(2012)

关键词要点
任务ImageNet 1000 类分类
输入3×224×224
结构8 层:5 卷积 + 3 全连接
卷积核11×11, 5×5, 3×3
池化3×3 重叠最大池化
激活ReLU(首次大规模使用)
正则Dropout 0.5、数据增强
归一化LRN(后被 BatchNorm 取代)
训练2×GTX 580 GPU(3 GB 显存)
成绩Top-5 16.4 % → 15.3 %(7 模型融合)

模型结构:
在这里插入图片描述


3. 核心差异对比

维度LeNet-5AlexNet
输入尺寸32×32224×224
网络深度7 层8 层
激活函数SigmoidReLU
GPU 训练有(2 GPU 并行)
数据集MNIST(60 k)ImageNet(1.2 M)
参数量60 k60 M

4. 可一键运行的 PyTorch 实现

环境:Python≥3.8,PyTorch≥1.12,torchvision

4.1 LeNet-5(MNIST)

# lenet5.py
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as Tclass LeNet5(nn.Module):def __init__(self, num_classes=10):super().__init__()self.features = nn.Sequential(nn.Conv2d(1, 6, 5), nn.Tanh(),        # C1nn.AvgPool2d(2),                      # S2nn.Conv2d(6, 16, 5), nn.Tanh(),       # C3nn.AvgPool2d(2),                      # S4nn.Conv2d(16, 120, 5), nn.Tanh()      # C5)self.classifier = nn.Sequential(nn.Linear(120, 84), nn.Tanh(),        # F6nn.Linear(84, num_classes)            # Output)def forward(self, x):x = self.features(x)x = x.flatten(1)return self.classifier(x)def train_lenet():transform = T.Compose([T.Resize(32), T.ToTensor()])train_ds = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)train_dl = torch.utils.data.DataLoader(train_ds, batch_size=64, shuffle=True)net = LeNet5()opt = optim.Adam(net.parameters(), lr=1e-3)loss_fn = nn.CrossEntropyLoss()for epoch in range(3):for x, y in train_dl:opt.zero_grad()out = net(x)loss = loss_fn(out, y)loss.backward()opt.step()print(f"Epoch {epoch+1} loss={loss.item():.4f}")torch.save(net.state_dict(), 'lenet5.pth')if __name__ == "__main__":train_lenet()

4.2 AlexNet(ImageNet 简化版,可在 CIFAR-10 上跑通)

# alexnet_cifar.py
import torch, torchvision, torch.nn as nn, torch.optim as optim
from torchvision import transforms as Tclass AlexNet(nn.Module):def __init__(self, num_classes=10):super().__init__()self.features = nn.Sequential(nn.Conv2d(3, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=2),nn.Conv2d(64, 192, kernel_size=3, padding=1), nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=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=2),)self.classifier = nn.Sequential(nn.Dropout(0.5),nn.Linear(256*4*4, 4096), nn.ReLU(inplace=True),nn.Dropout(0.5),nn.Linear(4096, 4096), nn.ReLU(inplace=True),nn.Linear(4096, num_classes))def forward(self, x):x = self.features(x)x = torch.flatten(x, 1)return self.classifier(x)def train_alexnet():transform = T.Compose([T.Resize(64), T.ToTensor()])train_ds = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)train_dl = torch.utils.data.DataLoader(train_ds, batch_size=128, shuffle=True)net = AlexNet()opt = optim.SGD(net.parameters(), lr=0.01, momentum=0.9, weight_decay=5e-4)loss_fn = nn.CrossEntropyLoss()for epoch in range(10):for x, y in train_dl:opt.zero_grad()out = net(x)loss = loss_fn(out, y)loss.backward()opt.step()print(f"Epoch {epoch+1} loss={loss.item():.4f}")torch.save(net.state_dict(), 'alexnet_cifar.pth')if __name__ == "__main__":train_alexnet()

5. 小结 & 面试高频问答

问题一句话答案
LeNet-5 为何用 5×5?当时算力与感受野权衡下的最优。
AlexNet 为何用 ReLU?解决 Sigmoid 梯度消失,加速 6× 训练时间。
Dropout 的本质?训练时随机“掐掉”神经元,等价于多模型投票,减少过拟合。
LRN 现在还用吗?基本不用,BatchNorm 更稳定。
两个网络最大启示?更深、更大、更多数据 + GPU并行 是提升性能的核心路线。

1、Dropout:正则化方法,提高模型泛化能力。
在这里插入图片描述
2、LRN:对于每个神经元,LRN会将其输出按照局部范围进行加权平均,然后将加权平均值除以一个尺度因子(通常为2),最后将结果取平方根并减去均值,得到归一化后的输出。
在这里插入图片描述


http://www.dtcms.com/a/308596.html

相关文章:

  • c语言的编译链接
  • Winform PathGradientBrush类使用
  • C#程序本地运行正常,通过网络下载报错:FileLoadException:“未能加载文件或程序集“xxx.dll”或它的某一个依赖项。
  • 【pycharm的使用】
  • Qwen3-30B-A3B-Thinking-2507 推理模型深度评测
  • 250721脑电分析课题进展——手工特征总结
  • lsof命令
  • SSO面临的问题
  • 为什么有时神经元会输出类似(甚至一样)?
  • 行业分享丨从工具应用到体系进化:东风商用车仿真体系建设与实践
  • 【源力觉醒 创作者计划】文心一言与deepseek集成springboot开发哪个更方便
  • 【力扣】面试经典150题总结01-数组/字符串
  • Dev-C++ 6.3 安装与使用指南:适合新手的C/C++编程工具
  • Allegro实用技巧-Snap-命令行移动
  • Android端RTMP低延迟播放器在工业与智能场景下的架构与落地
  • MySQL 中 CHAR 和 VARCHAR 类型有什么区别?
  • 一次性接收大量上传图片,后端优化方式
  • 【Git】Git 实战:完整拉取项目所有分支和标签,切换远程仓库,解决保护分支推送冲突
  • Linux Flathub软件管理方法 使用指南
  • 搭建个人博客
  • 决策树实现回归任务
  • 利用可观测性进行高效故障治理:从预防到改进的完整实践
  • 从Excel到工时管理系统:企业如何选择更高效的工时记录工具?
  • 第二十九章:AI的“原子与批次”:高维数据表示与操作精炼【总结前面(1)】
  • Windows 安全中心是什么?如何关闭 Windows 11 的安全中心
  • 算法导论第三版代码python实现与部分习题答案-第六章:堆排序
  • DooTask非营利性组织:让高效协作触手可及
  • Day 5: 深度学习理论与PyTorch实现 - 神经网络训练的艺术
  • RocketMQ消息队列:从入门到Spring Boot实战
  • 【React】fiber 架构