Skip to content

第 8 章:项目结构总览

理论篇结束,进入项目篇。这章先给出全局视图,帮你在读具体代码前建立地图。

8.1 文件结构

digit_recognizer/
├── config.py        ← 所有超参数的"控制台"
├── dataset.py       ← 数据加载与预处理
├── functions.py     ← 激活函数、损失函数
├── gradient.py      ← 数值梯度(调试用)
├── model.py         ← 神经网络模型(核心)
├── optimizer.py     ← SGD / Momentum / Adam
├── trainer.py       ← 训练循环
├── visualizer.py    ← 绘制训练曲线
├── main.py          ← 程序入口,串联所有模块
└── data/
    └── train.csv    ← MNIST 数据集(Kaggle 格式)

8.2 数据流:从文件到预测

train.csv
    ↓ dataset.py: 读取、划分、归一化
x_train (29400, 784)  +  y_train (29400,)
x_test  (12600, 784)  +  y_test  (12600,)

    ┌─── 每次训练取 batch_size=100 个样本 ───┐
    │  x_batch (100, 784)  t_batch (100,)    │
    │      ↓  model.py: 前向传播             │
    │  y_pred (100, 10)                      │
    │      ↓  functions.py: 损失计算          │
    │  loss (标量)                           │
    │      ↓  model.py: 反向传播             │
    │  grads: {W1:(784,50), b1:(50,),        │
    │          W2:(50,10),  b2:(10,)}        │
    │      ↓  optimizer.py: 参数更新         │
    │  params 更新                           │
    └──────────────────────────────────────┘
         ↓ 重复 num_epochs × iters_per_epoch 次
    history: train_loss, train_acc, test_acc
         ↓ visualizer.py
    训练曲线图

8.3 模块依赖关系

main.py
  ├── config.py       (超参数)
  ├── dataset.py      → config.py
  ├── model.py        → functions.py, config.py
  ├── optimizer.py    (独立)
  ├── trainer.py      → model.py, optimizer.py, config.py
  └── visualizer.py   (独立)

8.4 各模块职责一览

文件职责关键对象
config.py集中管理所有超参数,避免"魔法数字"TRAIN_CONFIG, MODEL_CONFIG
dataset.py读 CSV,归一化,划分训练/测试集load_mnist()
functions.py激活函数和损失函数的纯函数实现sigmoid, softmax, cross_entropy_error
gradient.py数值梯度(中心差分),用于验证反向传播numerical_gradient()
model.py两层神经网络,前向传播 + 反向传播TwoLayerNet
optimizer.py三种优化器策略SGD, Momentum, Adam
trainer.py训练循环,记录 loss 和准确率Trainer, TrainHistory
visualizer.py绘制训练曲线图plot_training_results()
main.py把所有模块串联起来main()

接下来,我们逐个深入每个文件。


← 第 7 章 | 返回目录 | 第 9 章:数据处理 →

基于 Kaggle MNIST 数据集,使用纯 numpy 从零实现