# 手写数字识别：MNIST 在线演示

> 来源：https://deeplearning.bnuai.com/demos/mnist ｜ 更新：2026-11-05 ｜ 内容依据邱锡鹏《神经网络与深度学习》（https://nndl.ai/）及作者公开课件

手写数字识别是深度学习的 “Hello World”。本页有两个演示：先用一个**已经训练好**的网络识别你写的数字，再在浏览器里**从零训练**一个自己的小网络。两个演示都只用纯 JavaScript 计算，模型和数据从本站下载，不会上传你画的内容。

## 一、写一个数字让网络识别

> （此处为交互演示，请在网页中使用：https://deeplearning.bnuai.com/demos/mnist）

**模型说明**：784-256-128-10 的前馈网络（ReLU 激活、Softmax 输出），在 MNIST 的 6 万张训练图上训练，训练时加入了随机旋转、缩放、平移和笔画粗细变化，让它对手写输入更稳健；权重用 8 位整数量化后只有约 230 KB，在 1 万张测试图上的准确率为 98.8%。对应教材第 4 章 [前馈神经网络](https://deeplearning.bnuai.com/chapters/04-feedforward)。

**可以试试**：
- 把数字写歪、写得很细或只写一半，看看置信度怎么变化。
- 写一个“不是数字”的符号（比如字母 A），网络仍然会自信地给出某个数字——Softmax 输出的概率并不等于“可信程度”。
- 观察隐藏层：不同数字会点亮不同的神经元组合，这就是网络学到的[表示](https://deeplearning.bnuai.com/demos/representation)。

## 二、在浏览器里训练自己的网络

> （此处为交互演示，请在网页中使用：https://deeplearning.bnuai.com/demos/mnist）

数据是从 MNIST 中随机抽取的 5000 张训练图和 1000 张测试图，缩小到 14×14 像素（约 1.2 MB），这样在手机上也能几秒钟训练完。训练好的模型会自动出现在上面的画板里，和预训练模型对比。

**可以试试**：
- **隐藏层设为 0**：网络退化为 [Softmax 回归](https://deeplearning.bnuai.com/demos/softmax)（线性分类器），测试准确率约 90%；加一个 64 个神经元的隐藏层，同样 8 轮通常能到 93%–94%。
- **训练样本只用 200 张**、训练 20 轮：训练集准确率接近 100%，测试集只有 80% 左右——这就是[过拟合](https://deeplearning.bnuai.com/demos/overfitting)。把样本加到 5000 张，差距会明显缩小；只加 L2 正则的效果则有限，说明“更多数据”往往是最有效的正则化。
- **SGD vs Adam**：SGD 需要更大的学习率（0.03–0.1），Adam 用 0.001–0.003 就很好；学习率太大时损失会发散。对照[优化器演示](https://deeplearning.bnuai.com/demos/optimizers)。
- 看混淆矩阵：最常见的错误是 4↔9、3↔5、7↔9 这些形状相近的数字。

## 数据与许可

MNIST 数据集由 Yann LeCun、Corinna Cortes 和 Christopher J.C. Burges 整理，按 [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) 许可使用。本页的预训练模型和 14×14 子集由本站用 MNIST 训练集和测试集生成。

## 相关内容

- 第 4 章 [前馈神经网络](https://deeplearning.bnuai.com/chapters/04-feedforward) · 第 5 章 [卷积神经网络](https://deeplearning.bnuai.com/chapters/05-cnn)
- [前馈网络训练场](https://deeplearning.bnuai.com/demos/mlp-playground) · [反向传播逐步演示](https://deeplearning.bnuai.com/demos/backprop) · [Softmax 与交叉熵](https://deeplearning.bnuai.com/demos/softmax)
