← Back to Home

写一个数字试试

在左边的画板上写一个 0–9 的数字。松手后,页面会把你的字迹整理成 28×28 的像素向量, 和 10 个从 6 万张 MNIST 训练图算出来的平均数字(质心)逐一比欧氏距离——谁最近就判成谁。 右边可以看到模型眼里的你的字,以及它和每个质心的距离。

手写板(尽量写大一点)

判断结果

模型看到的你(28×28)
最近的质心
写完松手,或点"识别"

松手之后发生了什么

  1. 裁剪:找到字迹的包围盒,把空白边全部裁掉——你写在哪个角落、写多大都不影响;
  2. 缩放:保持长宽比缩到 20×20 的盒子里(MNIST 官方就是这么做的);
  3. 居中:算出字迹的"墨水重心",平移到 28×28 画布的正中——没有这一步,准确率会从 82% 掉到接近瞎猜;
  4. 比距离:把 784 个像素当成一个向量 $x$,对每个质心 $c_d$ 算 $\|x - c_d\|$,取最小者。 k-NN 模式不比质心,而是和 6 万张训练图逐张比汉明距离(不同像素的个数,XOR + popcount 一次算 32 个像素),最近的 k 张投票。

试试这些花样:写一个开口的 4 和封口的 4;写一个上圈不封死的 8;把同一个数字写得很粗和很细。 看看哪些写法能骗过它——认错的时候,看看第二名是不是就是正确答案。 同一个字写完不动,在四种模式之间切换,看判断和距离怎么变: 二值模式验证的是"灰度重不重要",30 模板模式验证的是"一类一个代表够不够"—— 被认错的字常常在 30 模板模式下被某一型模板"捞"回来。 k-NN 模式还会把最像你笔迹的 k 张真实训练图亮出来当"判案证据", 这四档正好是同一根轴上的四个刻度:每类 1 个代表(82%)→ 3 个(87%)→ 原样记住 6000 个(96%)。