为了测试在现实条件下的识别质量,我们必须使用系统在训练期间从未看过的数字。否则,它可能记住了所有的训练数字,却仍无法识别我刚才写的「8」。MNIST 数据集包含了 10,000 个测试数字。此处你能看到每个数字对应的大约 1000 种书写形式,其中所有错误识别的数字列在顶部(有红色背景)。左边的刻度会给你一个粗略的分辨率精确度(正确识别的百分比)。 为了驱动训练,我们来定义损失函数,即一个展示出系统数字识别能力有多糟的值,并且系统会尽力将其最小化。损失函数(loss function,此处为「交叉熵」)的选择稍后会做出解释。你会看到,随着训练的进行,训练和测试数据的损失会减少,而这个现象是好的,意味着神经网络正在学习。X 轴表示了学习过程中的迭代。 这个准确度只是正确识别的数字的百分比,是在训练和测试集上计算出的。如果训练顺利,它便会上升。 最后的两幅图表说明了内部变量所取的所有值的扩展,即随训练进行而变化的权重和偏置。比如偏置从 0 开始,且最终得到的值大致均匀地分布在-1.5 和 1.5 之间。如果系统不能很好地收敛,那么这些图可能有用。倘若你发现权重和偏差扩展到上百或上千,那么就可能有问题了。 图中的条带为百分数。此处有 7 条带,所以每条带是所有值的 100/7,也就是 14%。 用于可视化 GUI 的键盘快捷键 1 ......... display 1st graph only 仅显示第 1 张图 2 ......... display 2nd graph only 仅显示第 2 张图 3 ......... display 3rd graph only 仅显示第 3 张图 4 ......... display 4th graph only 仅显示第 4 张图 5 ......... display 5th graph only 仅显示第 5 张图 6 ......... display 6th graph only 仅显示第 6 张图 7 ......... display graphs 1 and 2 显示 1 和 2 图 8 ......... display graphs 4 and 5 显示 4 和 5 图 9 ......... display graphs 3 and 6 显示 3 和 6 图 ESC or 0 .. back to displaying all graphs 返回,显示所有图 空格 ..... pause/resume 暂停/继续 O ......... box zoom mode (then use mouse) 框缩放模式(然后使用鼠标) H ......... reset all zooms 重置所有缩放 Ctrl-S .... save current image 保存当前图像 什么是“权重”和“偏置”?“交叉熵”又是如何被计算的?训练算法究竟是如何工作的?请到下一部分一探究竟。 4、理论 : 单层神经网络 MNIST 数据集中,手写数字是 28x28 像素的灰度图像。将它们进行分类的最简单的方法就是使用 28x28=784 个像素作为单层神经网络的输入。
神经网络中的每个「神经元」对其所有的输入进行加权求和,并添加一个被称为「偏置(bias)」的常数,然后通过一些非线性激活函数来反馈结果。 为了将数字分为 10 类(0 到 9),我们设计了一个具有 10 个输出神经元的单层神经网络。对于分类问题,softmax 是一个不错的激活函数。通过取每个元素的指数,然后归一化向量(使用任意的范数(norm),比如向量的普通欧几里得距离)从而将 softmax 应用于向量。 那么为什么「softmax」会被称为 softmax 呢?指数是一种骤增的函数。这将加大向量中每个元素的差异。它也会迅速地产生一个巨大的值。然后,当进行向量的标准化时,支配范数(norm)的最大的元素将会被标准化为一个接近 1 的数字,其他的元素将会被一个较大的值分割并被标准化为一个接近 0 的数字。所得到的向量清楚地显示出了哪个是其最大的值,即「max」,但是却又保留了其值的原始的相对排列顺序,因此即为「soft」。 (责任编辑:本港台直播) |