Автор работы: Пользователь скрыл имя, 20 Мая 2013 в 20:04, курсовая работа
В рамках бакалаврской работы был рассмотрен метод распознавания графических образов с шумами, основанный на применении нейронной сети Хемминга. Было рассмотрено влияние шумов в данных на результат работы сети.
Также в рамках работы был построен программный комплекс, реализующий данный метод и позволяющий анализировать сгенерированные последовательности данных с внесённым в них шумом. Шум является случайной величиной и имеет заданный закон распределения. Были проведены исследования и на основе их результатов были сформулированы выводы.
Рисунок 7. Схема алгоритма обучения НС Хемминга
Общий алгоритм распознавания для сети Хэмминга состоит из четырёх частей.
Подача распознаваемого образа на входы сети, передача данных с первого слоя на второй, обработка данных вторым слоем, выбор распознанного образа. Алгоритм работы первого этапа выглядит так:
1. Выбирается очередной нейрон.
2. Обнуляются его выход.
3. Изображение локализуется и приводится к нужному масштабу.
4. Локализованный образ поточечно подаётся на входы i-го нейрона. Если
k-я точка образа чёрная, то к значению выхода прибавляется значение веса k-го входа, в противном случае это значение вычитается.
5. Значение выхода пропускается через функцию линейного порога.
6. Переход на шаг 1, пока не исчерпаны все нейроны первого слоя.
Код первого этапа процедуры распознавания:
for i: =1 to m do
begin
InputRow[i].Output:=0;
for x: =1 to DestSize do
for y: =1 to DestSize do // Подаём образ на нейроны первого слоя
if i2.Canvas.Pixels[x-1,y-1]=
InputRow[i].Output:=
InputRow[i].Output+InputRow[i]
elseInputRow[i].Output:=
InputRow[i].Output-InputRow[i]
ifInputRow[i]. Output>=N/2 then
InputRow[i].Output:=N/2; // Выход - через функцию линейного порога
еnd;
На втором этапе надо передать данные с выходов первого слоя на входы второго и в список результатов предыдущего прохода распознавания:
for i:=1 to m do
begin
SecondRow[i].Output= InputRow[i].Output;
Outputs[i]:=InputRow[i].
SecondRow[i].Sum=0;
еnd;
На третьем этапе начинает работу второй слой последующей схеме.
1. Обнуляется счётчик итераций.
2. Запоминаются
выходы нейронов в списке
3. Перебираются поочередно все нейроны.
4. Каждый нейрон принимает значения выходов всех нейронов, суммирует их, предварительно умножив на коэффициент e (кроме случая, когда нейрон принимает своё же значение, которое остается без изменения).
5. Полученную сумму каждый нейрон посылает на свой выход.
6. Переход на шаг 2, пока выходы нейронов на текущей итерации не совпадут с выходами на предыдущей или пока счётчик числа итераций не превысит некоторое значение. Теоретически второй слой должен работать пока его выходы не стабилизируются, нона практике количество итераций искусственно ограничивают.
Исходный код:
Count:=0;
repeat
for i:=1 to m do // Значения предыдущей итерации
begin
Outputs[i]:=SecondRow[i].
SecondRow[i].Sum = 0;
End;
fori:=1 to m do // Один шаг работы второго слоя
for j:=1 to m do
if i=j then // c его выходов на его же входы
SecondRow[j].Sum := SecondRow[j].Sum+ SecondRow[i].Output;
else
SecondRow[j].Sum := SecondRow[j].Sum+ SecondRow[i].Output * e;
Flag:=true;
for i:=1 to m do
begin
SecondRow[i].Output = SecondRow[i].Sum
If (Outputs[i] <>SecondRow[i].Output) then flag:=false;
end;
Count:=Count+1;
until (flag or (Count>25));
Последний шаг— выбор нейрона второго слоя с наибольшим значением на
выходе. Его номер и есть номер распознанного образа:
Max:= -N;
For i:=1 to m do
If SecondRow[i].Output>Max then
begin
Max = SecondRow[i].Output;
Index = i;
end;
Программы содержит единственное окно, представлено на рисунке 8.1 и рисунке 8.2
Рисунок 8.2
Интерфейс
Кнопки:
Обучение – при нажатии на эту кнопку происходит обучение сети.
Исказить образ – при нажатии на неё происходит искажение одного из образов, параметры берутся из полей: используемый образ, процент искажения.
Распознавание – происходит распознавание одного из образов. Название берётся из поля используемый образ, результат выводится в виде двух картинок, слева – вводимый образ, справа – соответствующий ему(по мнению сети) идеальный. А так же в виде числа в поле результат распознавания.
Если поставить метку в поле «Нормальное распределение», то искажение происходит не по равномерному закону распределения, а по нормальному при помощи преобразования Бокса-Мюллера.
Рисунок 9. Диаграмма классов данной программы.
Программы содержит два окна. Главное окно программы появляется при запуске программы представлено на рисунке 10, второе окно появляется после нажатие вкладки «Графики» представлено на рисунке 11.
Рисунок 10. Вкладка «данные»
Рисунок 11. Вкладка «графики»
В главном окне программы происходит настройка генератора случайных величин и выбор метода генерации случайной величины.
Данное окно содержит:
В
окне «Графики обратной
В главе 2, данной работы был программно реализован эмулятор работы НС Хемминга размерностью 20 нейронов с десятью тысячами входов, решающей задачи распознавания искаженных изображений, использующий для искажения генераторы ПСВ, построенные в этой же главе. Также реализована генерация случайного шума с нормальным законом распределения методом Бокса-Мюллера, рассмотренным в предыдущей главе.
1. Спроектировать
генератор для получения
2. Спроектировать
генератор для получения
Таблица 1. Данные для генератора ПСВ.
3 |
4 |
5 |
9 |
10 |
0,135 |
0,45 |
0,22 |
0,12 |
0,075 |
3. Спроектировать
генератор для получения
Проводится опыт для фиксированного количества "карманов", равного 9, затем изменяется число выборки: 1000, 100.
Рисунок 12. Размер выборки 100.
Рисунок 13. Размер выборки 1000.
Проводится опыт для фиксированного количества "карманов", равного 5, затем изменяется число выборки: 1000, 100.
Рисунок 14. Размер выборки 100.
Рисунок 15. Размер выборки 1000.
При увеличении выборки и фиксированном числе карманов достигается наиболее точное приближение к заданному закону распределения случайной величины. Увеличивается вероятность такого события, что реализация случайной величины χ2 окажется не меньше наблюдаемой по случайным причинам.
Фиксируется количество "величин", равное 5, затем изменяется число выборки: 10000, 1000, 100.
Рисунок 16. Размер выборки 100.
Рисунок 17. Размер выборки 1000.
Проводится опыт для фиксированного количества "карманов", равного 5, затем изменяется число выборки: 100, 500.
Рисунок 18. Размер выборки 100.
Рисунок 19. Размер выборки 500.
Проводится опыт для фиксированного количества "карманов", равного 9, затем изменяется число выборки: 100, 500.
Рисунок 20. Размер выборки 100.
Рисунок 21. Размер выборки 500.
Для каждой функции считаем χ2 и количество степеней свободы, потом по специальным таблицам находим значение вероятности α. Это вероятность такого события, что реализация случайной величины χ2 окажется не меньше наблюдаемой по случайным причинам. Если α мала, то гипотезу о принятом распределении отвергаем, если же α приближается к 1, расхождение между практическим и теоретическим распределениями несущественно и гипотезу можно считать правдоподобной или, по крайней мере, не противоречащей опытным данным.
Для каждой функции считаем l, по специальным таблицам находим значения Q(l), в качестве вероятности берётся значение, при котором Q(l) = 1 – l.
В результате исследования качества работы генераторов было доказано, что полученные псевдослучайные последовательности чисел – значения ПСВ – состоят из чисел, распределения которых соответствуют заданным законам распределения.
Графическое построение в одних осях теоретического и практического распределений позволило субъективно определить степень совпадения или расхождения законов. Для всех генераторов теоретические и практические распределения практически совпадают, т.е. имеют незначительные расхождения. При увеличении выборки реализаций ПСВ достигается более точное приближение к заданному закону распределения.
Для
формального суждения о степени
расхождения теоретического и фактического
законов распределения были количественно
установлены степени