1

Предположим, я пытаюсь создать нейронную сеть для распознавания символов на простой сетке 5x5 пикселей. У меня есть только 6 возможных символов (символов) - X,+,/,\,|Распознавание символов нейронной сети

На данный момент у меня есть НЧ-сеть с обратной связью - с 25 входными узлами, 6 скрытыми узлами и единственным выходным узлом (между 0 и 1 - сигмовидным).

Выход соответствует символу. Например, 'X' = 0.125, '+' = 0.275, '/' = 0.425 и т. Д.

Независимо от того, какой выход сети (при тестировании) соответствует любому персонажу, ближайшему к численному. i.e - 0.13 = 'X'

На входе 0,1 означает, что пиксель вообще не затенен, 0,9 означает полностью затененный.

После обучения сети по 6 символам я тестирую ее, добавляя некоторый шум.

К сожалению, если я добавлю немного шума в '/', сеть считает, что это '\'.

Я подумал, что, возможно, упорядочение 6 символов (например, e - какое числовое представление они соответствуют) могло бы иметь значение.

Возможно, количество скрытых узлов вызывает эту проблему.

Возможно, моя общая концепция отображения символов на числа вызывает проблему.

Любая помощь была бы чрезвычайно оценена, чтобы сделать сеть более точной.

+1

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

ответ

3

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

Например,

- 1 0 0 0 0 0 
X 0 1 0 0 0 0 
+ 0 0 1 0 0 0 
/ 0 0 0 1 0 0 
\ 0 0 0 0 1 0 
| 0 0 0 0 0 1 

Это гораздо проще для нейронной сети, чтобы учиться. Во время прогнозирования выберите узел, который имеет наибольшее значение в качестве вашего прогноза. Например, если у вас есть ниже выходных значений на каждом выходе узла:

- 0.01 
X 0.5 
+ 0.2 
/ 0.1 
\ 0.2 
| 0.1 

Предсказать характер, как «X».

+0

Это было огромное улучшение, спасибо большое! –