Шаг 65.
Основы создания нейросети на Python.
Несколько интересных проектов. Собственный рукописный текст

    На этом шаге мы рассмотрим работу созданной нейронной сети с собственными изображениями.

    В предыдущих шагах мы распознавали изображения рукописных цифр из базы данных MNIST. А почему бы не использовать собственный рукописный текст?

    В этом эксперименте мы создадим свою тестовую базу данных, используя собственноручно написанные цифры. Кроме того, мы попытаемся сымитировать различные виды почерка, а также зашумленные и прерывистые изображения, чтобы посмотреть, насколько хорошо с ними справится наша нейронная сеть.

    Для создания изображений можно использовать любой графический редактор.

    Вот как выглядят некоторые из подготовленных изображений.

   

    Цифру "5" написана маркером. Цифра "4" - мелом. Цифра "3" написана маркером, но линия намеренно сделана прерывистой. Цифра "2" взята из типичного газетного или книжного шрифта, но немного размыта. Цифра "6" как бы покрыта рябью, словно мы видим ее как отражение на поверхности воды. Последнее изображение совпадает с предыдущим, но в него добавлен шум, чтобы намеренно затруднить распознавание цифры нейронной сетью.

    Все это забавно, но здесь есть и серьезный момент. Ученых изумляет поразительная способность человеческого мозга сохранять функциональность даже после того, как он испытал повреждения. Предполагают, что в нейронной сети приобретенные знания распределяются между несколькими связями, а потому даже в условиях повреждения некоторых связей остальные связи могут успешно функционировать. Это также означает, что они могут достаточно хорошо функционировать и в случае повреждения или неполноты входного изображения. Таковы возможности нашего мозга, и именно это мы хотим протестировать с посеченной цифрой "3", изображенной на приведенной выше иллюстрации.

    Прежде всего, мы должны создать уменьшенные версии PNG-изображений, масштабировав их до размера 28x28 пикселей, чтобы привести в соответствие с использовавшимися ранее данными MNIST. Для этого можете использовать свой графический редактор.

    Для чтения и декодирования данных из распространенных форматов изображений, включая PNG, мы вновь используем библиотеки Python. Взгляните на следующий простой код.

import scipy.misc
img_array = scipy.misc.imread(image_file_name, flatten=True)

img_data = 255 - img_array.reshape(784) 
img_data = (img_data / 255 * 0.99) + 0.01

    Функция scipy.misc.imread() поможет нам в получении данных из файлов изображений, таких как PNG- или JPG-файлы. Чтобы использовать библиотеку scipy.misc, ее необходимо импортировать. Параметр flatten=True превращает изображение в простой массив чисел с плавающей запятой и, если изображение цветное, переводит цветовые коды в шкалу оттенков серого, что нам и надо.

    Следующая строка преобразует квадратный массив размерностью 28x28 в длинный список значений, который нужен для передачи данных нейронной сети. Ранее мы делали это не раз. Новым здесь является вычитание значений массива из 255. Это необходимо сделать, поскольку обычно коду 0 соответствует черный цвет, а коду 255 - белый, но в наборе данных MNIST используется обратная схема, в связи с чем мы должны инвертировать цвета для приведения их в соответствие с соглашениями, принятыми в MNIST.

    Последняя строка выполняет уже знакомое вам масштабирование данных, переводя их в диапазон значений от 0,01 до 1,0.

    Нам нужно создать версию программы, использовавшейся ранее для создания базовой нейронной сети и ее обучения с помощью набора данных MNIST, но теперь мы будем тестировать программу с использованием набора данных, созданного на основе наших изображений. Работает ли она? Конечно, работает! Следующая иллюстрация демонстрирует результаты опроса сети с использованием наших изображений.


Рис.1. Результаты работы нейронной сети с созданными изображениями

Архив блокнота с измененной нейронной сетью и подготовленными графическими файлами можно взять здесь.

    Как видите, нейронной сети удалось распознать все изображения, включая намеренно поврежденную цифру "3". Не удалось распознать лишь зашумленную цифру "6".

    Проведите эксперименты с подготовленными вами изображениями, включая изображения рукописных цифр, и убедитесь в том, что нейронная сеть действительно работает.

    Также проверьте, как далеко можно зайти с испорченными или искаженными цифрами. Вы будете поражены гибкостью нашей нейронной сети.

    На следующем шаге мы попытаемся проникнуть в мозг нейронной сети.




Предыдущий шаг Содержание Следующий шаг