Skip to content

FNN 消融实验:各改进组件对 MNIST 分类精度的贡献分析#6036

Open
Calvin1989 wants to merge 6 commits intoOpenHUTB:mainfrom
Calvin1989:main
Open

FNN 消融实验:各改进组件对 MNIST 分类精度的贡献分析#6036
Calvin1989 wants to merge 6 commits intoOpenHUTB:mainfrom
Calvin1989:main

Conversation

@Calvin1989
Copy link
Copy Markdown
Contributor

背景

原始代码 tutorial_minst_fnn-tf2.0-exercise.py 存在以下问题:

问题 原版 本次改进
训练方式 将全部 60000 张图像一次性送入(全批量梯度,无随机性) Mini-batch(256张/batch)
正则化 无任何正则化手段 逐步引入 Dropout / BatchNorm
网络深度 仅 784→128→10(两层) 最深达 784→256→128→64→10(四层)
学习率策略 固定学习率 Config-E 启用 ReduceLROnPlateau 自适应衰减
可视化 无任何图表输出 自动生成 4 张对比图

新增文件

src/chap04_simple_neural_network/fnn_ablation_study.py

实验设计

对以下 5 种模型配置进行对比训练(EPOCHS=20,BATCH_SIZE=256,Adam lr=1e-3):

配置 结构描述
A: Baseline 784→128→10,ReLU,无正则化(复现原版结构,改为 mini-batch)
B: +Dropout Baseline + Dropout(0.3)
C: +BN Baseline + BatchNormalization(激活前插入)
D: +BN+Dropout Baseline + BN + Dropout(0.3)
E: Enhanced 784→256→128→64→10 + BN + Dropout + He初始化 + LR调度

实验结果

最佳测试准确率对比

配置 参数量 最佳测试准确率 vs Baseline
A: Baseline 101,770 0.9804
B: +Dropout 101,770 0.9810 +0.06%
C: +BN 101,898 0.9779 -0.25%
D: +BN+Dropout 101,898 0.9779 -0.25%
E: Enhanced 269,578 0.9846 +0.43%

结果图

测试集准确率曲线

fnn_ablation_test_acc

训练集准确率曲线

fnn_ablation_train_acc

训练 Loss 曲线

fnn_ablation_loss

最终测试准确率柱状图

fnn_ablation_bar

关键发现(消融结论)

  1. 单独引入 BatchNorm(Config-C/D)对浅层网络效果有限甚至略负:BN 在隐藏层只有 128 个神经元的浅层结构中,带来了轻微的测试精度下降(-0.25%),说明 BN 的收益需要足够深的网络才能体现。

  2. Dropout 对浅层网络正则化效果温和(Config-B,+0.06%):在简单任务上轻微改善泛化,增益不显著。

  3. 多组件协同使用效果显著(Config-E,+0.43%):更深的网络结合 BN、Dropout、He 初始化和学习率调度,最终实现最优测试准确率 98.46%

  4. 训练集 vs 测试集对比揭示过拟合:Config-C 训练准确率趋近 1.0,但测试集低于 Baseline,印证了浅层+BN 存在过拟合。

运行方式

cd src/chap04_simple_neural_network
python fnn_ablation_study.py

Calvin1989 and others added 6 commits April 30, 2026 15:36
- 在画面 58% 高度处绘制金黄色虚线围栏(VIRTUAL FENCE)
- 检测目标越线时框变橙红色并显示 !INTRUSION! 标签
- 上升沿计数入侵事件(同一批目标持续越线只计1次)
- 围栏线在入侵时闪烁变色,屏幕四周出现橙色边框警报
- V2X 面板新增 Intrusions 入侵事件计数行
- V2X 广播最高优先级推送 FENCE BREACH 消息
Compare 5 configurations (Baseline / +Dropout / +BN / +BN+Dropout / Enhanced)
to quantify the contribution of each improvement component.

Key results:
- Baseline (784->128->10): 98.04% test accuracy
- Enhanced (deeper+BN+Dropout+LR schedule): 98.46% test accuracy (+0.43%)
- Generates 4 comparison plots: train/test accuracy curves, loss curve, bar chart
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant