一文搞懂CNN经典架构-AlexNet!

推荐直接网站在线阅读:aicoting.cn

2012 年,深度学习在计算机视觉领域迎来了决定性时刻。Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 提出了 AlexNet,并在 ImageNet 大规模视觉识别挑战赛(ILSVRC 2012)中取得了空前的成功。

AlexNet 的错误率比第二名低了近 10 个百分点,直接引爆了深度学习浪潮,使卷积神经网络(CNN)成为计算机视觉的主流方法。

网络结构

AlexNet 的整体结构与 LeNet 相似,但更深更宽,并结合了多项创新技术。其输入为 224×224×3 的彩色图像,最终输出 1000 个类别的预测结果。

典型的网络层次为:

  • Conv1:96 个 11×11 卷积核,步幅 4,输出 55×55×96 特征图。
  • MaxPool1:3×3 池化,步幅 2,输出 27×27×96。
  • Conv2:256 个 5×5 卷积核,输出 27×27×256。
  • MaxPool2:3×3 池化,步幅 2,输出 13×13×256。
  • Conv3:384 个 3×3 卷积核,输出 13×13×384。
  • Conv4:384 个 3×3 卷积核,输出 13×13×384。
  • Conv5:256 个 3×3 卷积核,输出 13×13×256。
  • MaxPool3:3×3 池化,步幅 2,输出 6×6×256。
  • FC6:全连接层,输出 4096 维。
  • FC7:全连接层,输出 4096 维。
  • FC8:全连接层,输出 1000 类。

关键创新点

  1. 更深更宽的卷积结构:相比 LeNet,AlexNet 使用更多卷积核和更深的层次,显著提升了特征表达能力。
  2. ReLU 激活函数:首次大规模使用 ReLU 替代 Sigmoid/Tanh,加快了收敛速度并缓解梯度消失问题。
  3. Dropout 正则化:在全连接层中使用 Dropout,有效防止过拟合。
  4. 数据增强:通过平移、翻转和颜色扰动等方式扩充训练数据,提升模型泛化能力。
  5. GPU 并行训练:利用两块 GPU 分担计算任务,大幅加快训练速度,为后续大规模模型训练奠定了基础。

AlexNet 的成功标志着深度学习时代的到来。它不仅在图像分类任务中取得突破,还推动了目标检测、图像分割、人脸识别等任务的快速发展。之后的 VGG、GoogLeNet、ResNet 等经典网络,几乎都是在 AlexNet 的基础上进一步改进和扩展的。

代码示例

下面给出一个 AlexNet 的 PyTorch 实现,基于官方 torchvision.models.alexnet 结构。注意 CIFAR-10 图片大小为 32×32,我们需要先缩放到 224×224 才能适配 AlexNet。

python 复制代码
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 定义 AlexNet 模型
class AlexNet(nn.Module):
    def __init__(self, num_classes=1000):
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2),  # Conv1
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            
            nn.Conv2d(96, 256, kernel_size=5, padding=2),           # Conv2
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            
            nn.Conv2d(256, 384, kernel_size=3, padding=1),          # Conv3
            nn.ReLU(inplace=True),
            
            nn.Conv2d(384, 384, kernel_size=3, padding=1),          # Conv4
            nn.ReLU(inplace=True),
            
            nn.Conv2d(384, 256, kernel_size=3, padding=1),          # Conv5
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        self.classifier = nn.Sequential(
            nn.Dropout(),
            nn.Linear(256 * 6 * 6, 4096),  # FC6
            nn.ReLU(inplace=True),
            
            nn.Dropout(),
            nn.Linear(4096, 4096),         # FC7
            nn.ReLU(inplace=True),
            
            nn.Linear(4096, num_classes),  # FC8
        )

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

# 数据预处理(以 CIFAR-10 为例,图像大小调整为 224x224)
transform = transforms.Compose([
    transforms.Resize(224),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

train_dataset = datasets.CIFAR10(root='./data', train=True, transform=transform, download=True)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)

# 初始化模型、损失函数和优化器
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = AlexNet(num_classes=10).to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# 简单训练循环
for epoch in range(1):
    for batch_idx, (data, target) in enumerate(train_loader):
        data, target = data.to(device), target.to(device)
        
        outputs = model(data)
        loss = criterion(outputs, target)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        if batch_idx % 100 == 0:
            print(f"Epoch [{epoch+1}], Step [{batch_idx}], Loss: {loss.item():.4f}")

这段代码实现了 AlexNet 的基本结构,并在 CIFAR-10 数据集上进行了简单训练(实际应用中,AlexNet 通常用于 ImageNet 规模的数据)。

AlexNet 是深度学习发展史上的里程碑。它不仅在图像分类任务中取得了巨大突破,还提出了 ReLU、Dropout、数据增强和 GPU 并行训练等重要技术,奠定了现代卷积神经网络的基础。即便在今天,AlexNet 依然被广泛用作深度学习入门的典型案例。

📚推荐阅读

一文搞懂深度学习中的池化!

面试官:给我讲一下卷积吧!

一文搞懂卷积神经网络!

面试官:正则化都有哪些经典的方法?

面试官:你在训模型的时候经常使用的学习率策略有哪些?

面试官:深度学习中经典的优化算法都有哪些?

一文搞懂深度学习中的通用逼近定理!

一文搞懂深度学习中的表征学习理论!

一文搞懂深度学习中的信息论!

一文搞懂深度学习的反向传播与优化理论!

最新的文章都在公众号aicoting更新,别忘记关注哦!!!

作者:aicoting

分享是一种信仰,连接让成长更有温度。

我们下次不见不散!

相关推荐
微尘hjx6 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
云和数据.ChenGuang6 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
西西木科技丨Shopify开发机构7 小时前
CalDigit TS4案例:AI产品图的Shopify整站接入与验收
人工智能·shopify·独立站
2601_965448877 小时前
AI视频制作:做系列节气民俗视频音色不统一,AI 音色克隆省事的方法
人工智能·机器学习·音视频
美狐美颜SDK开放平台7 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
HRaitest7 小时前
秋招技术岗招聘提效:三类 AI 招聘方案的技术底层与选型逻辑
大数据·人工智能·求职招聘·ai-native
天远数科8 小时前
零信任架构实战:基于天远企业股权变更构建自动化商业银行对公授信存续期股权异动与资产抽逃预警网关
运维·人工智能·架构·自动化
车软学堂8 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
海盗12348 小时前
AI 新闻日报 10-28:Atria Dawn 完整版开源、Cursor Agent SDK 转正、Genie 4 实时世界模型
人工智能·机器人·开源·人工智能aigc
志尊宝9 小时前
AI原生前端开发(035):AI时代的工程化最佳实践总结
人工智能·ai-native