| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Нейронная сеть, распознавание образов |
| Автор: User008 13.8.2012, 20:11 |
| Как можно хорошо реализовать распознавание символов для картинки, размером, например 50х50? Необязательно, чтобы работал очень быстро или сверхточно, хорошо бы по обоим критериям получить удовлетворительные результаты. Это обычно реализуется многослойным персептроном? 1) Сколько слоёв по сколько нейронов использовать? 2) Что даёт использование нескольких слоёв в распознавании образов? На примере xor понятно, что без второго слоя задача не решается, а что дают дополнительные слои при распознавании образов? 3) Как выход выражает результат? Допустим, для 10 цифр, вроде бы достаточно 4 бит, но может из-за того что некоторые биты принимают значение 1 чаще при выражении 10 цифр в двоичной системе, лучше сделать 10 нейронов, один из которых будет в ответе 1, остальные 0? Также непонятно, что делать с тем, что выход нейрона крайнего слоя не обязан быть целым числом? |
| Автор: OlegDorozhko 11.9.2012, 17:37 |
| Допустим, у вас есть две последовательности чисел 10, 20, 30, 40, 50 и 11, 19, 30, 44, 50 Эти последовательности при отображении, скажем на графике дадут примерно подобные линии Вопрос, как запрограммировать программу, чтобы она эти две последовательности посчитала равными? На помощь придет объект Cell - ячейка и такая присказка: у любой ячейки есть и начало и конец. Итак, объект Cell имеет два поля s и f Создаем 5 объектов Cell на основе первой последовательности Вот они: [10,10][20,20][30,30][40,40][50,50] Объект Cell также имеет метод eql, который возвращает истину, если входной параметр помещается между граничными значения s и f (включительно) Таким образом, после инициализации 5 ячеек первой последовательностью и сравнении в цикле этих ячеек с каждым элементом второй последовательности получим 40% совпадение между двумя последовательностями. Но что будет, если под чутким руководством оператора, одна из ячеек изменит свое значение? [10,11] <- эта [20,20][30,30][40,40][50,50] Теперь при сравнении в цикле этих ячеек с каждым элементом второй последовательности получим уже 60% совпадение между двумя последовательностями. Такое изменение возможно при вызове метода learning нашего объекта Cell. В этом методе входной параметр сравнивается с граничными условиями и если он меньше s то s присваивается входной параметр. Если он больше f то f присваивается входной параметр. Так происходит обучение ячейки на распознавание близко лежащих значений. Обучив все ячейки добиваемся 100% результата распознавания наших двух последовательностей, как похожих между собой. Более того, если подать на вход третью подобную последовательность то также получим результат близкий к 100% Состояние ячеек после обучения можно сохранять, за это и другие операции с нашими ячейками отвечает объект CellsManager. Это: первичная инициализация ячеек, сравнение входящего образца с ячейками, обучение ячеек и сохранение обученных ячеек. Используя классы CellsManager и Cell я написал простенькую обучаемую программу распознавания речи. (разместил ее на sourceforge.net) Подобная программная конструкция может оказаться весьма полезной при разработке программ распознавания образов |