BONUS 02 · 训练好的网络
让网络认数字
这个网络不是我们临时搭的,而是用 PyTorch 认认真真训练出来的。你在黑板上写一个 0–9,它会先看一张 16×16 的点阵图,再猜你写的是几。
PyTorch 训练
MNIST 数据集
16×16 输入
2790 个权重
01
先写一个数字
用鼠标或手指,在深色黑板上写 0–9。写大一点、粗一点,它更容易认出来。
写字板
0–9写的时候不用管位置,它会自动把笔迹挪到中间。
网络看到的图
16 × 16你的笔迹会被缩成 16×16 个小格子:深色是 1,浅色是 0。
一共 256 个格子,就是网络的 256 个输入。
02
它是怎么猜的
网络会给 0–9 每个数字打一个分,再把分数变成概率。概率最高的那个,就是它的答案。
它觉得是
?
先写一个数字吧,0–9 都可以。
03
把网络拆开看
这张网络有 4 层:256 个输入 → 10 个神经元 → 10 个神经元 → 10 个输出。
256输入格子
10第 1 层
10第 2 层
10输出 0–9
点下面的按钮,看看刚才写的数字在每一层变成了什么。
给大人:手动输入 256 个 0/1
和训练时一样,一行 16 个,一共 16 行。也可以用空格、逗号分隔,或者直接连着写。
04
三个小挑战
看看这个网络什么时候很自信,什么时候会犯迷糊。
1
写一个 8
先写一个工整的 8,再写一个歪歪扭扭的 8,看看概率差多少。
2
让它犹豫一下
试着写一个又像 3、又像 5 的数字,观察哪几个概率一起变高。
3
挑战 0
写一个瘦瘦的 0,再写一个胖胖的 0,看看它是不是都认得。
想一想:它只见过 16×16 的黑白数字。如果写字太细、太斜,或者只写了一半,它也会犯迷糊。这说明网络的答案,和它见过的东西很有关系。