В простых случаях, когда не требуется высокая точность пользуются нейронной сетью со стандартными параметрами. Единственным необходимым явно задаваемым значением является число нейронов в скрытом слое.
Инициализация сети:
net = newff(learn_array(1:900,:),learn_array(901:904,:),6);
Здесь первый аргумент - обучающая выборка, второй - метки, третий - число нейронов.
Обучение:
net = train(net,learn_array(1:900,:),learn_array(901:904,:));
Здесь первый аргумент - сама сеть, которая обучается, второй - обучающая выборка, третий - метки классов.
Вылезет окошечко обучения, в конце можно закрыть его.
Всё. Сеть обучена.
Проверяем сеть
Снова рисуем любую цифру из этих четырёх, сохраняем в виде такой же картинки 30х30.
Загружаем картинку:
test_image = imread('test.bmp');
Преобразуем к столбцу:
test_col = reshape(test_image,[],1);
Распознаём:
result = sim(net,test_col)
здесь sim() - функция симуляции работы сети.
В результате получил:
и картинка была такой:
По результату видим, что максимальное значение - второе (0.8599), что соответствует цифре два. Таким образом, можно сказать, что ИНС обучена корректно и работает как нужно. (заработала как нужно с третьего раза, печаль-беда)
Для повышения точности распознавания нужна большая обучающая выборка (а не по 5 штук на класс), и картинки необходимо масштабировать таким образом, чтобы все цифры были одинаковых размеров.