| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > распознавание образов + нейронная сеть |
| Автор: eldo 21.5.2006, 12:35 |
| Добрый день. Подскажите, какую нейронную сеть лучше использовать если необходимо распознавать несколько образов, но при этом на вход могут подаваться не только необходимые образы, но и несоответствующие заданному набору, то есть те, которые надо отсеять. Ведь обычная нейронная сеть на выходе будет давать наиболее близкий образ без отсева. А надо как раз этот отсев еще реализовать, то есть когда образ не узнан. Если возможно, то поделитесь ссылкой на источник. Благодарю. |
| Автор: Anarhist 21.5.2006, 23:15 |
| Обращайся вот к этому челу - DragonFire! |
| Автор: DragonFire 22.5.2006, 14:47 |
| Ну вообщем с ходу так ничего не могу придумать, кроме как запоминать наиболее близкий результат для каждой фигуры - при обучении это легко сделать, а потом поставить условие - если текущий результат сильно отличается от сохраненных - значит фигура нераспознана... Напримар буква имеет число 3.1, А буква Б 3.9. Парог у нас 3.5 - выше порога Б, ниже А. Добавляем еще два порога - 3 и 4, получаем что если результат распознавания получается ниже 3 или выше 4 - фигура нераспознана... Вот примерно так... |
| Автор: Goliath 22.5.2006, 17:10 |
| Очень интересная тема! Прошу прощение за оффтоп но не могли бы вы скинуть ссылку по этой теме? |
| Автор: eldo 22.5.2006, 17:38 |
| DragonFire, а какую при этом использовать нейронную сеть? обычно на выходе нейронной сети либо скачок 0-1 либо линейная функция либо сигмоид. но все они [-1..1]. Как можно получить, например, 3.2? Или Вы предлагаете использовать какой-то другой вид сети? (я не очень с ними всеми знаком) Goliath, можете почитать для начала help по matlab про нейронные сети. там даже есть пример распознавания букв. |
| Автор: DragonFire 22.5.2006, 20:32 |
| Вот я тут кое-что писал, про распознавание символов - там я описывал систему, которую использую сам... Незнаю насколько она правильная, но зато работает... http://forum.vingrad.ru/index.php?showtopic=70098&view=findpost&p=560440 А ответ действительно либо 1, либо 0 - соответственно фигура либо "А", либо "Б" - в моем примере, тоесть вычесляю результат по форумуле <РЕЗУЛЬТАТ>=<сигнал1>*<Вес1>+<сигнал2>*<Вес2>+...+<сигнал25>*<Вес25> А потом сравниваю с порогом, получая ответ 1 или о (true или false) |
| Автор: PGsoft 2.6.2006, 00:13 |
| Здравый корень в рассуждениях имеется Использовать надо персептрон, с нейронами не пороговой функции активации (можно и с линейной, как у DragonFire). Однослойный персептрон имеет по нейрону на каждый распознаваемый объект, и выходом его является вектор ("концы аксонов"). Если задача распознавания нелинейная (в большинстве случаев это можно выяснить только экспериментально, видя, что однослойная сеть необучаема), то используется многослойный персептрон. Следует обучить сеть набором "чистых" и близких к ним образов, а затем на выходе пропускать только сигнал больше определённого порога (в общем случае ограничиваясь значением порядка максимальной ошибки, полученной при тестировании на наборе "подходящих" объектов). Таким образом, если на входе - "неподходящй" объект, то выход даст нулевой вектор, иначе - вектор с указанием опознанного объекта. Рекомендую www.statsoft.ru (там есть электронный учебник) |
| Автор: eldo 3.8.2006, 22:28 |
| VictorTsaregorodtsev, а можете немного подробнее про кластеризацию рассказать? Специфика задачи - распознавание нескольких голосовых команд диктора с обеспечением большой результативности (более 99%). В данный момент использую перцептрон (функция активации - ступенька) с тремя выходами (три команды). Результаты неплохие, но хотелось бы отсеять неправильные команды диктора, так как они этот результат портят малость (часто принимаются за какую-нибудь нормальную команду) |
| Автор: VictorTsaregorodtsev 9.8.2006, 13:39 |
| Поподробнее: 1. ОБучающая выборка из типичных (корректных) примеров кластеризуется, например, алгоритмом динамических ядер. Желательно при этом, чтобы в каждый кластер попало как минимум десятка 2-3 примеров (т.е. может быть придется включать разных дикторов). И чтобы каждый кластер был достаточно однороден - т.е. в нем были примеры одного класса (команды). Именно эта выборка используется также и для обучения сети - сеть можно учить как до, так и после кластеризации, метки кластеров сетью никак не используются. 2. Когда обученной сети поступает на распознавание новый вектор данных, то сначала ищется ближайший к нему кластер. Причем "близость" считается с точки зрения каждого кластера - вычислением ковариационной матрицы примеров в кластере и расстояния Махаланобиса на ее основе. В случае гипотезы о хорошем соответствии закона распределения внутри кластера многомерному нормальному закону р.Махаланобиса и будет как раз учитывать вытянутость кластера вдоль его главных осей, т.е. фактически трансформирует кластер в "шарик" нормального распределения с единичными дисперсиями во всех направлениях. 3. Это расстояние от классифицируемого примера до ближайшего кластера будет или превышать, или не превышать некоторого порога. Порог выбирается в 90-95-99% и рассчитывается аппаратом проверки гипотез так, чтобы внутри этого порога лежал соответствующий процент общей плотности нормального распределения, а вне - хвосты распределения. Т.е. чем выше расстояние, менее вероятнее пример принадлежит нормальному распределению, т.к. улетает в маловероятные "хвосты" или за их пределы. 4. Если расстояние меньше порога, т.е. пример относительно близок к центру одного из кластеров, соответствующих эталонным примерам, то пример подается сетке на распознавание. Если же больше - то сетка ничего не делает и можно явно просигнализировать о нетипичном примере. |