Невозможно воспроизвести результаты нейронной сети Майкла Нильсена с данными рукописных цифр MNIST - PullRequest
0 голосов
/ 29 ноября 2018

Мой вопрос может быть актуален для всех, кто пытается следовать онлайн-книге Майкла Нильсена по нейронным сетям и глубокому обучению:

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)

Но получил тот же результат.

Я не получаю сообщение об ошибке.Так что еще сложнее отлаживать, так как я даже понятия не имею, где он падает, и какие ключевые слова искать, если кто-то уже опубликовал такой вопрос в другом месте!

И так какЯ только что скопировал чей-то буквальный код в то, что, по сути, является началом книги, довольно тревожно.

Я был бы очень признателен за понимание того, почему я не получаю того, чего ожидаю.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...