A029-AlexNet模型实现鸟类识别
视频课程:https://www.bilibili.com/video/BV1mveqzXE2n/
【购买前必看】
1、关于我们
深度学习乐园是由python哥全职技术团队组建运营【团队成员为:复旦大学博士、华东理工爱丁堡博士、格拉斯哥博士、纽约大学硕士、浙江大学硕士】。
我们只做python业务,精通sklearn机器学习/torch深度学习/django/flask/vue全栈开发。
2、关于项目
我们从2018年开始,就专注于深度学习sci、ei、ccf、kaggle等,至今已有7年,共发表过10多篇顶刊顶会。
官网累积了数百个项目,已有3000多学员付费购买,圈子内有口皆碑:www.zzgcz.com (更多高级私密项目无法对外,联系微信定制:zzgcz_com)
3、售后承诺
包远程安装调试,所有项目均在本地运行通过,大部分都有截图和录屏。
支持二次修改,所有项目都是我们自己写的,改起来也非常容易。
加急定制1-2天可完成,这就是实力证明,远程验收满意后再付全款!
所有客户终身售后。兼职的人家都有主业,谁愿意持续服务你?
1. 项目简介
本项目旨在使用 PyTorch 框架手写实现经典的 AlexNet 卷积神经网络,并在一个自建的鸟类图像数据集上完成分类任务。
-
数据集位于
./bird_photos/,其中每个子文件夹对应一个鸟类类别。 -
模型从零开始训练,未使用预训练权重。
-
项目最终目标是:输入任意一张鸟类图像,输出其所属类别及预测置信度。

2. 技术要点
-
自定义 AlexNet 实现
-
五个卷积层 + 三个全连接层的经典架构。
-
输入固定为
224×224,输出为类别数。 -
数据划分与增强
-
使用
sklearn.model_selection.train_test_split,分层抽样保证各类别比例一致。 -
数据增强:随机裁剪缩放、水平翻转、颜色抖动。
-
训练优化
-
优化器:
Adam(lr=3e-4, weight_decay=1e-4)。 -
调度器:
CosineAnnealingLR,随 epoch 递减学习率。 -
混合精度训练:
torch.amp.autocast("cuda") + GradScaler。 -
可复现性与加速
-
固定随机种子
seed=42。 -
启用
cudnn.benchmark=True提升 GPU 卷积计算效率。
3. 数据集与预处理
-
目录结构:
-
bird_photos/ ├─ Bananaquit/ ├─ Cardinal/ ├─ BlueJay/ └─ Sparrow/ -
划分比例:训练集 80%,验证集 20%。
-
图像预处理:
-
训练集:
-
RandomResizedCrop(224, scale=(0.7,1.0)) -
RandomHorizontalFlip() -
ColorJitter() -
ToTensor()+Normalize(mean, std)
-
-
验证集:
-
Resize(256) → CenterCrop(224) -
ToTensor()+Normalize(mean, std)
-
-
标准化参数:
-
均值:
[0.485, 0.456, 0.406] -
方差:
[0.229, 0.224, 0.225]
4. 模型结构
AlexNet(PyTorch 实现):
-
特征提取部分 (
features): -
Conv1:输入 3 通道,输出 64,卷积核 11×11,stride=4,padding=2 → ReLU → MaxPool(3, stride=2)
-
Conv2:64→192,5×5,padding=2 → ReLU → MaxPool(3, stride=2)
-
Conv3:192→384,3×3,padding=1 → ReLU
-
Conv4:384→256,3×3,padding=1 → ReLU
-
Conv5:256→256,3×3,padding=1 → ReLU → MaxPool(3, stride=2)
-
分类部分 (
classifier): -
Flatten →
256×6×6=9216 -
Linear(9216, 4096) → ReLU → Dropout(0.5)
-
Linear(4096, 4096) → ReLU → Dropout(0.5)
-
Linear(4096, num_classes)
5. 训练流程
5.1 损失与优化
-
损失函数:
CrossEntropyLoss() -
优化器:
Adam,学习率3e-4 -
学习率调度:
CosineAnnealingLR
5.2 训练循环
-
每个
epoch执行: -
前向传播 (
autocast混合精度) -
反向传播 (
scaler.scale) -
更新参数 (
optimizer.step()) -
每轮结束后:
-
计算训练集平均损失与精度
-
在验证集上评估并保存最佳模型权重
5.3 模型保存
-
最佳模型:
-
路径:
outputs/best_alexnet_from_scratch.pth -
保存内容:
state_dict、类别标签、验证集最佳精度、配置参数等。
6. 推理与应用
单图推理函数
predict_image(model_path, image_path)
-
输入:模型路径 + 图像路径
-
输出:预测类别名称、置信度
-
示例:
predict_image("outputs/best_alexnet_from_scratch.pth","./bird_photos/Bananaquit/001.jpg")
# => Prediction: Bananaquit (confidence=0.9821)
7. 结果与可视化
-
日志输出:每轮打印训练/验证损失与精度
-
Epoch 01/5 | train_loss 1.2345 acc 0.5678 | val_loss 1.0123 acc 0.6789 -
保存文件:
-
best_alexnet_from_scratch.pth→ 模型参数 -
可扩展添加:Loss/Acc 曲线、混淆矩阵、预测样例图
8. 优缺点评价
优点
-
结构清晰:手写 AlexNet,便于理解经典 CNN 设计思想。
-
增强鲁棒性:数据增强与分层划分提高泛化能力。
-
训练效率高:AMP 混合精度与 Adam 优化器加速收敛。
-
可扩展性强:易于添加更多可视化或替换更现代的骨干网络。
缺点
-
参数量大:尤其是两个全连接 4096 层,计算开销高。
-
缺少正则化技巧:未引入 BatchNorm、Label Smoothing 等。
-
精度受限:相较现代网络(ResNet/EfficientNet)准确率偏低。
改进方向
-
引入 BatchNorm、SE-Block 或注意力机制
-
尝试 更轻量的网络(MobileNet、EfficientNet)
-
使用 更多数据增强(Mixup、CutMix)
-
增加 可视化模块(Grad-CAM、特征图展示)