Skip to content

CNN_tensorflow代码优化#5227

Merged
donghaiwang merged 1 commit intoOpenHUTB:mainfrom
charon191910:main
Apr 6, 2026
Merged

CNN_tensorflow代码优化#5227
donghaiwang merged 1 commit intoOpenHUTB:mainfrom
charon191910:main

Conversation

@charon191910
Copy link
Copy Markdown
Contributor

修改概述: 重构CNN_tensorflow.py,从TF1迁移至TF2 Keras API,引入残差网络和现代训练策略,将MNIST识别准确率从约99%提升至99.53%

修改的详细描述

  1. API迁移 (TF1→TF2): 将tf.placeholdertf.Sessiontf.nn.dropout等TF1风格代码全部重构为TF2 Keras API(tf.keras.Modeltf.keras.layers),消除废弃API警告,代码从约250行精简至约230行,可读性和可维护性显著提升。
  2. 修复原代码Bug: 原代码训练循环中使用小写变量名max_epochkeep_prob_rate,但定义时为大写MAX_EPOCHKEEP_PROB_RATE,运行会报NameError;优化器引用了未定义的learning_rate变量(应为LEARNING_RATE)。
  3. 模型架构升级: 用预激活残差块(BN→ReLU→Conv→BN→ReLU→Conv+Shortcut)替代原始的单层卷积堆叠(7x7 Conv→5x5 Conv),网络深度从2层卷积增加到3个残差块(共7层卷积);用全局平均池化(GlobalAveragePooling2D)替代Flatten+全连接(原代码7×7×64=3136→1024,参数量约320万),大幅减少参数量;全连接分类头从单层1024改为512+128两层,参数更高效。总参数从约340万降至约44万,模型体积从约13MB降至1.69MB。
  4. 权重初始化改进: 用He正态初始化(he_normal)替代原来的截断正态分布(stddev=0.1),更适配ReLU激活函数,加速收敛。
  5. 正则化策略增强: 在全部卷积层添加L2权重衰减(5e-5);使用SpatialDropout2D(0.05)替代普通Dropout,对卷积特征图按通道丢弃更有效;添加标签平滑(0.02)防止模型过度自信。
  6. 数据增强: 原代码数据增强因is_training为placeholder用Python if判断实际未生效。改进版使用Keras内置层实现训练时自动生效的轻度增强:随机旋转±9°、平移±5%、缩放±3%(不做水平翻转,避免6和9混淆)。
  7. 学习率策略优化: 用5轮线性Warmup+余弦退火调度替代原来的固定学习率(1e-4),前期小学习率稳定训练,后期平滑衰减精细调优。
  8. 训练流程改进: 添加EarlyStopping(patience=8)自动停止、ModelCheckpoint保存最佳模型、CSVLogger记录训练日志;新增每个数字(0-9)的单独准确率统计,便于分析薄弱环节。

经过了什么样的测试?

  1. 操作系统: Windows
  2. Python版本: Python 3.11.15(Anaconda虚拟环境)
  3. TensorFlow版本: 2.13.0(tensorflow-intel)
  4. NumPy版本: 1.24.3
  5. SciPy版本: 1.10.1
  6. 硬件: CPU训练(支持AVX2/AVX512/FMA指令集),每轮约190秒,30轮共约95分钟
  7. 数据集: MNIST(训练集60,000张,测试集10,000张)

运行效果

  • 测试集准确率: 99.53%(最佳验证准确率99.60%,出现在第27轮)
  • 测试集损失: 0.1699
  • 错误分类数量: 47 / 10,000
  • 训练轮数: 30轮

各数字识别准确率:

数字 准确率 测试样本数 错误数
0 99.80% 980 2
1 99.82% 1135 2
2 99.81% 1032 2
3 99.80% 1010 2
4 99.19% 982 8
5 99.55% 892 4
6 98.64% 958 13
7 99.61% 1028 4
8 99.90% 974 1
9 99.11% 1009 9
61c24e49fd0ad044320a230f170b24dd

@donghaiwang donghaiwang merged commit f28004c into OpenHUTB:main Apr 6, 2026
1 check passed
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.

2 participants