使用MNIST手写数字数据无法重现Michael Nielsen的神经网络结果

时间:2018-11-29 14:19:54

标签: python neural-network deep-learning mnist

我的问题可能与任何试图遵循迈克尔·尼尔森(Michael Nielsen)关于神经网络和深度学习的在线书的人有关:

http://neuralnetworksanddeeplearning.com/

按照代码加载并从MNIST手写数字数据中学习。

我已经下载了Python 3文件,可以在这里找到:

https://github.com/MichalDanielDobrzanski/DeepLearningPython35

在这本书之后,我加载了MNIST数据并将其分为训练/验证/测试数据集,创建了具有30个隐藏神经元的网络,并使用随机梯度下降(SGD)从训练数据中学习(在Jupyter中执行)笔记本):

import mnist_loader
training_data, validation_data, test_data = mnist_loader.load_data_wrapper()

import network
net = network.Network([784, 30, 10])

net.SGD(training_data, 30, 10, 3.0, test_data=test_data)

每个时期都花了一段时间,但输出很合理:

Epoch 0 : 9101 / 10000
Epoch 1 : 9276 / 10000
...
Epoch 28 : 9480 / 10000
Epoch 29 : 9515 / 10000

再次,按照本书,我将隐藏的神经元的数量增加到100,并执行以下操作:

net = network.Network([784, 100, 10])

net.SGD(training_data, 30, 10, 3.0, test_data=test_data)

但这一次得到以下输出:

Epoch 0 complete
Epoch 1 complete
...
Epoch 28 complete
Epoch 29 complete

或多或少瞬时运行。

我不明白为什么它没有像以前那样运行(慢慢打印出每个时代的测试结果)。

我尝试重新运行前一行(具有30个神经元),并得到了相同的结果(而不是最初看到的那种输出)。

由于我是新手,所以我想知道关于值的存储方式是否存在某种特殊之处,那就是它不喜欢对net的重新定义。所以我尝试创建一个新变量:

net2 = network.Network([784, 100, 10]) 
net2.SGD(training_data, 30, 10, 3.0, test_data=test_data)

但是得到了相同的结果。

我没有收到错误消息。因此,调试起来甚至更加困难,因为我什至不知道它的下降位置,也没有线索,以防万一有人在其他地方已经发布了这样的问题时要搜索什么关键词!

由于我只是逐字抄写了别人的代码,所以从本质上讲这本书非常令人担忧。

对于为什么我没有得到我期望得到的东西,我将不胜感激。

谢谢!

0 个答案:

没有答案