IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Алгоритм распознования образов на основе персептрона, C++/qt
Andrewshkovskii
сообщение 9.04.2010 17:29
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


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

Сообщение отредактировано: Andrewshkovskii - 9.04.2010 17:34


Прикрепленные файлы
Прикрепленный файл  Распознавание_оптических_образов_с_помощью_однослойного_персептрона.pdf ( 296.77 килобайт ) Кол-во скачиваний: 2828
Прикрепленный файл  var.zip ( 298.05 килобайт ) Кол-во скачиваний: 158
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
Andrewshkovskii
сообщение 9.04.2010 23:26
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Опять к работе, после проветривания мозгов.
Ну дело такое, что сетку и массив пикселей строиться так же, остается дело в том, как работать с алгоритмом, и как его реализовать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.04.2010 23:31
Сообщение #3


Гость






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

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

Дельфийскую программу пока не смотрел, она может только помешать, захочется сделать именно так, как там, даже если можно сделать по-другому. Если в процессе обсуждения (я надеюсь, оно будет? smile.gif ) столкнемся с какими-либо непреодолимыми препятствиями - тогда загляну в код для Дельфи
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 9.04.2010 23:42
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


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

Сообщение отредактировано: Andrewshkovskii - 9.04.2010 23:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 10.04.2010 12:11
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Вопрос : измениться ли качество разпознования, если мы будем изображение разбивать не на 35 , а , допустим, на 30 квадратов?Т.е. меньше квадратов - меньше нейронов в персептроне. Просто не объяснено откуда взялось значение 35 в мет. указаниях..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.04.2010 15:40
Сообщение #6


Гость






Изменится, естественно. Чем "мельче" ты разобьешь исходное изображение, тем точнее оно будет распознаваться. С одной стороны. С другой - тем больше ресурсов тебе понадобится на это распознавание и больше времени уйдет на обучение.
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 10.04.2010 15:45
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


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


Гость






Цитата
W[i][j] - что это? т.е. Wi[0] это нейроны персептрона, а именно Wij?
А я вот смотрю в твою методичку, и не понимаю, откуда ты взял W[i][j] вообще? Wi[t] - вижу, Wij - не присутствует...
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 10.04.2010 22:04
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


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

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

Вот отсюда..
Изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.04.2010 11:27
Сообщение #10


Гость






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

Там чуть выше написано: "В отличие от элементарного персептрона данная ИНС имеет 10 нейронов". Итого - 10 нейронов, каждый имеет такую структуру как на рис. 5, а следовательно - 35 весов у каждого. Отсюда и i = 1 .. 10, j = 1 .. 35
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 11.04.2010 12:31
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Ну нейронов там столько, сколько эталонов должно быть.А я хотел узнать вот что :
Можно ли изображение разбивать на квадраты, как было сделано в прошлой задаче?или же необходимо изображение разбить на эти 35 квадратов, определить есть ли в квадратике пиксель(кусок изображения, 1- есть, 0 - нет изображения или его части в этом квадратике),посылаем на каждый нейрон "выход" каждого квадратика, и уже там делаем всю логику?
Просто на меня с одной стороны давит опыт прошлой работы, с другой указания в методичке, и как там это показано..Вот и не могу определиться..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 12.04.2010 11:24
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


В общем я так подумал..не подойдет представление озображение и работа с этим представление в персептроне, все это можно использовать для отображения изображения, но не работы с ним через нейроны (т.к там большой вектор 0 и 1 (900 элементов) , а нам надо от каждолго изображения 30-35 нулей и едениц - решение о заполнености каждого из 30-35 квадратов.Хотя можно подумать над преобразованием этого вектора..Допустим, взять каждую строку(ведь этот вектор - преобразованая матрица 30х30) и проверять на сколько она заполнена 1 и 0, и если более чем на х%, то писать 1, если менее -0.
Или я всетаки что-то усложняю?
Там же мы как-бы уменьшали изображение, а не разбивали..
Ещё я думаю что можно сделать сделать вот так : разбить изображение на 30 квадратов(что бы не менять сейчас его размер..), потом для каждого квадрата : "ткнуть" в центр, и если там естьчерным цвет - то писать 1, если нет то 0".
Вот мои догадки..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Andrewshkovskii
сообщение 12.04.2010 23:32
Сообщение #13


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 20:46
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"