На этом шаге мы попробуем протестировать созданную нейронную сеть.
Справившись с тренировкой сети, по крайней мере на небольшом подмножестве из ста записей, мы должны проверить, как она работает, и сделаем это, используя тестовый набор данных.
Прежде всего, необходимо получить тестовые записи. Соответствующий код очень похож на тот, который мы использовали для получения тренировочных данных.
# загрузить в список тестовый набор данных CSV-файла набора MNIST test_data_file = open("D:/NN/mnist_train_100.csv", 'r') test_data_list = test_data_file.readlines() test_data_file.close()
Мы распакуем эти данные точно так же, как и предыдущие, поскольку они имеют аналогичную структуру.
Прежде чем создавать цикл для перебора всех тестовых записей, посмотрим, что произойдет, если мы вручную выполним одиночный тест. Ниже представлены результаты опроса уже обученной нейронной сети, выполненного с использованием первой записи тестового набора данных.
[In 5]: # загрузить в список тестовый набор данных CSV-файла набора MNIST test_data_file = open("D:/NN/mnist_train_100.csv", 'r') test_data_list = test_data_file.readlines() test_data_file.close()
[In 6]: # получить первую тестовую запись all_values = test_data_list[0].split(',') # вывести маркер print(all_values[0]) 7
[In 7]: image_array = numpy.asfarray(all_values[1:]).reshape((28, 28)) matplotlib.pyplot.imshow(image_array, cmap='Greys', interpolation='None')
[In 8]: n.query((numpy.asfarray(all_values[1:]) / 255 * 0.99) + 0.01) array([[0.05329934], [0.02146129], [0.0155554 ], [0.11568484], [0.08033635], [0.01573777], [0.00507456], [0.89996532], [0.03866633], [0.05745956]])
Рис.1. Результат тестирования
Как видите, в качестве маркера первой записи тестового набора сеть определила символ "7". Именно этого ответа мы ожидали, опрашивая ее.
Графическое отображение пиксельных значений подтверждает, что рукописной цифрой действительно является цифра "7".
В результате опроса обученной сети мы получаем список чисел, являющихся выходными значениями каждого из выходных узлов. Сразу же бросается в глаза, что одно из выходных значений намного превышает остальные, и этому значению соответствует маркер "7". Это восьмой элемент списка, поскольку первому элементу соответствует маркер "0".
У нас все сработало!
Этот момент заслуживает того, чтобы мы им насладились, и полностью окупает все затраченные нами до сих пор усилия!
Мы обучили нашу нейронную сеть и добились того, что она смогла определить цифру, предоставленную ей в виде изображения. Вспомните, что до этого сеть не сталкивалась с данным изображением, поскольку оно не входило в тренировочный набор данных. Следовательно, нейронная сеть оказалась в состоянии корректно классифицировать незнакомый ей цифровой символ. Это поистине впечатляющий результат!
С помощью всего лишь нескольких строк кода на языке Python мы создали нейронную сеть, способную делать то, что многие люди сочли бы проявлением искусственного интеллекта, - распознавать изображения цифр, написанных рукой человека.
Этот результат впечатляет еще больше, если учесть, что для обучения сети была использована ничтожно малая часть полного набора тренировочных данных. Вспомните, что этот набор включает 60 тысяч записей, а мы использовали только 100 из них. Были даже сомнения относительно того, что у нас вообще что-либо получится!
На следующем шаге мы закончим изучение этого вопроса.