Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Алгоритм распознования образов на основе персептрона

Автор: Andrewshkovskii 9.04.2010 21:29

Данная работа является расширением решенной вот http://forum.pascal.net.ru/index.php?showtopic=25128 задачи.
На данном этапе я успел разработать только интерфейс, и пришел сюда за советом, а не за тем, что бы кто-то написал за меня:)
Я так понимаю, что : Преобразование изображения в пиксельную сетку и отображение матрицы пикселей точно такое-же, как и в ранней работе?
Я вообще хочу понять, как правильно спроектировать основную логику распознования. Допустим мы получили матрицу пикселей.
Далее берем каждый элемент , выполняем все шаги, в соотвествии с алгоритмом (Дельта-правило, стр.13)
Я правильно понимаю?Ещё я так понял, надо разделить область ввода изображение на 35 квадратов?
Пока я только пытаюсь разобраться с теорией алгоритма, если что не так описал, прощу прощения, и говорю спасибо за любой ответ:)
А да, забыл чуток, вот ещё пример программы аналогичной, разработаной на delphi smile.gif


Прикрепленные файлы
Прикрепленный файл  Распознавание_оптических_образов_с_помощью_однослойного_персептрона.pdf ( 296.77 килобайт ) Кол-во скачиваний: 4360
Прикрепленный файл  var.zip ( 298.05 килобайт ) Кол-во скачиваний: 414

Автор: Andrewshkovskii 10.04.2010 3:26

Опять к работе, после проветривания мозгов.
Ну дело такое, что сетку и массив пикселей строиться так же, остается дело в том, как работать с алгоритмом, и как его реализовать.

Автор: volvo 10.04.2010 3:31

Цитата
Я вообще хочу понять, как правильно спроектировать основную логику распознования. Допустим мы получили матрицу пикселей. Далее берем каждый элемент , выполняем все шаги, в соотвествии с алгоритмом (Дельта-правило, стр.13) Я правильно понимаю?
Правильно понимаешь. Каждую букву алфавита тебе надо прогнать через персептрон, чтобы сравнить возвращаемый им ответ с правильным (с тем, который от системы распознавания ожидается, в твоем случае - гласная/согласная буквы).

Цитата
Ещё я так понял, надо разделить область ввода изображение на 35 квадратов?
Да, для того, чтобы обработать каждую букву, ее изображение разбивается на 35 квадратов, каждому из которых устанавливается веса... (далее - происходит обучение методом настройки весов по алгоритму Хебба).

Дельфийскую программу пока не смотрел, она может только помешать, захочется сделать именно так, как там, даже если можно сделать по-другому. Если в процессе обсуждения (я надеюсь, оно будет? smile.gif ) столкнемся с какими-либо непреодолимыми препятствиями - тогда загляну в код для Дельфи

Автор: Andrewshkovskii 10.04.2010 3:42

Да-да , будет, Вольво, ты меня во многих "проблемах" выручил, и я не хочу этим горидиться..но иногда мне нужен интеллектуальный толчок!:)
Сейчас я кое-что допилю в интерфейсе, что бы удобно было дальше работать, и буду разбираться с логикой, как что-то разберу, или встряну - я приду сюда, сформулирую вопрос, выскажу свои догадки и попрощу помощи:)
А да, забыл только про свой вариант, у меня не гласные/согласные, а определенные символы( альфа, лямблда и т.д) , задано 2 скорости обучения( 0.3, 0.6) и вес W3j принадлежит отрезку [0;0.1].

Автор: Andrewshkovskii 10.04.2010 16:11

Вопрос : измениться ли качество разпознования, если мы будем изображение разбивать не на 35 , а , допустим, на 30 квадратов?Т.е. меньше квадратов - меньше нейронов в персептроне. Просто не объяснено откуда взялось значение 35 в мет. указаниях..

Автор: volvo 10.04.2010 19:40

Изменится, естественно. Чем "мельче" ты разобьешь исходное изображение, тем точнее оно будет распознаваться. С одной стороны. С другой - тем больше ресурсов тебе понадобится на это распознавание и больше времени уйдет на обучение.

Автор: Andrewshkovskii 10.04.2010 19:45

ну у нас не промыщленные масштабы, так что я думаю это не критично будет.
Я вот что хочу спросить :
W[i][j] - что это? т.е. Wi[0] это нейроны персептрона, а именно Wij? Просто смотрю на картинку, и мне становиться казаться что это вектор каждого фрагмента изображения..?(я разбиваю на 30 квадратов, точнее на квадраты по 30х30, как в прошлом задании)..

Автор: volvo 10.04.2010 22:03

Цитата
W[i][j] - что это? т.е. Wi[0] это нейроны персептрона, а именно Wij?
А я вот смотрю в твою методичку, и не понимаю, откуда ты взял W[i][j] вообще? Wi[t] - вижу, Wij - не присутствует...

Автор: Andrewshkovskii 11.04.2010 2:04

Цитата(volvo @ 10.04.2010 19:03) *

А я вот смотрю в твою методичку, и не понимаю, откуда ты взял W[i][j] вообще? Wi[t] - вижу, Wij - не присутствует...

Вот отсюда..
Изображение

Автор: volvo 11.04.2010 15:27

А, ну да, у тебя же обучение по дельта-правилу в задании, я почему-то решил, что обучение по Хеббу...

Там чуть выше написано: "В отличие от элементарного персептрона данная ИНС имеет 10 нейронов". Итого - 10 нейронов, каждый имеет такую структуру как на рис. 5, а следовательно - 35 весов у каждого. Отсюда и i = 1 .. 10, j = 1 .. 35

Автор: Andrewshkovskii 11.04.2010 16:31

Ну нейронов там столько, сколько эталонов должно быть.А я хотел узнать вот что :
Можно ли изображение разбивать на квадраты, как было сделано в прошлой задаче?или же необходимо изображение разбить на эти 35 квадратов, определить есть ли в квадратике пиксель(кусок изображения, 1- есть, 0 - нет изображения или его части в этом квадратике),посылаем на каждый нейрон "выход" каждого квадратика, и уже там делаем всю логику?
Просто на меня с одной стороны давит опыт прошлой работы, с другой указания в методичке, и как там это показано..Вот и не могу определиться..

Автор: Andrewshkovskii 12.04.2010 15:24

В общем я так подумал..не подойдет представление озображение и работа с этим представление в персептроне, все это можно использовать для отображения изображения, но не работы с ним через нейроны (т.к там большой вектор 0 и 1 (900 элементов) , а нам надо от каждолго изображения 30-35 нулей и едениц - решение о заполнености каждого из 30-35 квадратов.Хотя можно подумать над преобразованием этого вектора..Допустим, взять каждую строку(ведь этот вектор - преобразованая матрица 30х30) и проверять на сколько она заполнена 1 и 0, и если более чем на х%, то писать 1, если менее -0.
Или я всетаки что-то усложняю?
Там же мы как-бы уменьшали изображение, а не разбивали..
Ещё я думаю что можно сделать сделать вот так : разбить изображение на 30 квадратов(что бы не менять сейчас его размер..), потом для каждого квадрата : "ткнуть" в центр, и если там естьчерным цвет - то писать 1, если нет то 0".
Вот мои догадки..

Автор: Andrewshkovskii 13.04.2010 3:32

В принципе я кое-что понял...не обязательно делить изображение на 30 квадратов, достаточно послать тот самый вектор из матрицы 30x30.. Там ещё ошибка в формуле. В общем я разобрался, спасибо,Volvo !:)

Автор: Гость 28.11.2016 1:50

Цитата(Andrewshkovskii @ 13.04.2010 3:32) *

В принципе я кое-что понял...не обязательно делить изображение на 30 квадратов, достаточно послать тот самый вектор из матрицы 30x30.. Там ещё ошибка в формуле. В общем я разобрался, спасибо,Volvo !:)


Указали бы где конкретно ошибка и в какой формуле для тех кто будет просматривать ваше сообщение в будущем ...

Автор: nishaknapp 29.07.2022 18:06

Why not settling on games that is fun and at the same time your earning. Well itll make suspense because of the game as well but dude just try it and it gave me hope while pandemic is real rn. https://casino-fair.com/3-things-you-need-to-do-when-you-play-in-an-online-casino/