Приложение преобразовывает входящее изображение и на основании предсказаний персептрона перерисовывает его.
Open - открывает окно для выбора изображения.
Draw - обрабатывает изображение персептроном и выводит результат в pictureBox.
Save - сохраняет обработанное изображение в выбранную папку.
Create perceptron - создаёт персептрон указанного размера.
Hidden layers - поле для ввода размеров скрытых слоёв.
Read learning data - открывает окно для выбора папки с обучающими данными.
Start learning - запускает обучение персептрона.
Count of cycles - поле для ввода количества циклов обучения.
Get training error - вычисляет и выводит среднюю квадратичную ошибку на учебных данных.
Reset - заполняет веса персептрона случайными значениями из промежутка [-1; 1].
Также есть ProgressBar, на котором отображается прогресс чтения датасета, обучения модели и рисования изображения.
Как пользоваться?
- Заполнить поле Hidden layers. Оно должно содержать несколько целых положительных чисел, перечисленных через пробел и/или запятую.
Например, если ввести "32 24", то персептрон будет иметь следующие слои:
64 входных нейрона +1 bias,
32 скрытых нейрона +1 bias,
24 скрытых нейрона +1 bias,
10 выходных нейронов. - Нажать Create perceptron, чтобы создать персептрон с указанными ранее размерами скрытых слоёв.
- Нажать Read learning data. В открывшемся окне выбрать папку, содержащую в себе только изображения для обучения.
Изображения должны быть размером 8x8 пикселей и иметь в названии 11 чисел через пробел.
Числа в названии являются точным результатом, к которому будет стремиться обучение.
Первое число - это уникальное число. Необходимо, чтобы не было изображений с одинаковыми именами.
Остальные числа означают какая часть изображения более тёмная.
1 - верх
2 - лево
3 - верх право
4 - верх лево
5 - чёрный
6 - низ
7 - право
8 - низ лево
9 - низ право
10 - белый
Сгенерировать датасет для обучения можно здесь. - Заполнить поле Count of cycles и нажать Start learning.
Чем больше скрытых слоёв и чем больше указано число циклов обучения, тем больше это займёт времени. - Нажать Open и выбрать какое-нибудь ЧЁРНО-БЕЛОЕ изображение.
Чёрно-бело изображение необходимо, поскольку персептрон обучался именно на чёрно-белых изображениях.
Почему не обучать его на цветных? потому что придётся его обучать отличать каждый цвет от каждого другого цвета, что будет очень намного сложнее в реализации. - Если персептрон достаточно хорошо обучен, можно нажать Draw.
После этого приложение на какое-то время перестанет отвечать, но не потому что сломалось, а потому что изображение обрабатывается и рисуется. - По желанию результат можно сохранить на диск.
Пример результата:
Эти пустые глаза меня пугают...
Как это работает?
Прочитать про принцип работы персептрона можно здесь.
В данном приложении всё работает следующим образом: цикл проходит по изобржению и считывает с него области 8x8 пикселей и персептрон предсказывает, к какому из десяти классов (они написаны выше) принадлежит каждый участок изображения.
Т.е. на вход персептрона отдаются 64 числа - интенсивность цвета каждого пикселя. А на выходе он возвращает десять чисел - вероятность пренадлежности к каждому классу. Размер перептрона - [64+1, N+1, 10], где N - это размеры скрытых слоёв, вводимые пользователем. +1 - это bias.
Далее персептрон обучается обратном распространением ошибки.