13。实验室:99%的挑战
确定神经网络大小的一个好方法是:首先实现一个小型的,有点过于受限的神经网络,
然后渐渐给它更多的自由度,并添加dropout,以确保它不会过拟合。
针对您的问题,这样做最终能得到一个相当优秀的网络。
例如,我们在第一个卷积层中仅使用了4个卷积核。
如果您能认识到:这些 卷积核 的权重 在训练期间会进化为一个个不同的形状识别器,
您或许会很直觉地发现问题:4个卷积核可能不足以解决我们的问题,因为手写数字是超过4种基本形状构成的一种形式。
因此,让我们稍微增大卷积核的大小,将卷积层中的补丁数量从4,8,12增加到6,12,24,然后在完全连接的层上添加dropout。
为什么不在卷积层使用dropout?
因为卷积层的神经元使用重复相同的权重,因此在一次训练迭代期间通过随机丢掉一些权重来避免过拟合的的dropout对它们不起作用。
去尝试吧,突破99%的限制。
如上图所示增加卷积核的大小和通道数,并在卷积层上添加dropout。
解决方案可以在文件中找到mnist_3.1_convolutional_bigger_dropout.py。
上图所示的模型在10,000个测试数字中仅认错了72个。
您可以在MNIST网站上找到的世界纪录大约为99.7%。
我们的模型仅仅使用了100行的Python / TensorFlow代码构建,得到的结果距离最好的结果只差了0.4个百分点。
总而言之,这是我们更大的卷积网络的差异。
为神经网络提供额外的自由度,可以使最终精度从98.9%提高到99.1%。
增加dropout不仅解决了测试损失上升的问题,而且让我们的训练过程安全地超过99%,甚至达到99.3%