Исследование результатов работы программы-эмулятора ИНС

Автор: Пользователь скрыл имя, 17 Апреля 2013 в 18:30, курсовая работа

Описание работы

Искусственные нейронные сети (НС) – набор математических и алгоритмических методов для решения широкого круга задач. Они превосходят последовательные машины в решении тех же задач, в которых машину превосходит человек. К задачам, успешно решаемым НС на данном этапе их развития, относятся [1]:
Распознавание зрительных и слуховых образов: от распознавания текста до систем голосового управления.
Ассоциативный поиск информации и создание ассоциативных моделей: синтез речи, формирование естественного языка.
Формирование моделей различных нелинейных и трудно описываемых математически систем, а также прогнозирование развития этих систем во времени: прогнозирование развития различных природных процессов, изменений курсов валют, курсов акций и других финансовых показателей.

Содержание

Введение 7
Постановка задачи 9
1. Системный анализ методов распознавания образов и построения генераторов псевдослучайных величин. 10
1.1. Анализ методов распознавания графических образов 10
1.1.1 Статистические методы распознавания 10
1.1.2 Структурные (лингвистические) методы распознавания 12
1.1.3 Нейросетевые методы распознавания 15
1.1.4 Вывод по результатам анализа рассмотренных методов 18
1.2. Процедура искажения изображений 20
1.3.1 Преобразование Бокса – Мюллера. 20
1.3. Выводы 22
2. Реализация эмулятора нейронной сети Хемминга, решающей задачи распознавания зашумлённых образов. 23
2.1. Выбор структуры ИНС 25
2.2. Программная реализация ИНС 27
2.2.1. Интерфейс пользователя программы-эмулятора ИНС 31
2.3. Выводы 33
3. Исследование результатов работы программы-эмулятора ИНС 34
3.1 Выводы 36
Заключение 37
Библиографический список 38

Работа содержит 1 файл

нейросети.docx

— 397.07 Кб (Скачать)

Распознавание – происходит распознавание одного из образов. Название берётся из поля используемый образ, результат выводится  в виде двух картинок, слева –  вводимый образ, справа – соответствующий  ему(по мнению сети) идеальный. А так же в виде числа в поле результат распознавания.

Если поставить  метку в поле «Нормальное распределение», то искажение происходит не по равномерному закону распределения, а по нормальному  при помощи преобразования Бокса-Мюллера.

 

    1. Выводы

 

В главе 2, данной работы был программно реализован эмулятор работы НС Хемминга размерностью 20 нейронов с десятью тысячами входов, решающей задачи распознавания искаженных изображений. Также реализована генерация случайного шума с нормальным законом распределения методом Бокса-Мюллера, рассмотренным в предыдущей главе.

 

 

  1. Исследование результатов работы программы-эмулятора ИНС

 

Таблица 2. Опыты по распознаванию образов

Тестируемый образ

Процент зашумления образа

Вид искаженного образа

(одна  из 10 наложенных ошибок)

Результат распознавания

Число опытов/количество верных распознаваний

Шум с равномерным распределением

10%

 

40/40

20%

 

40/40

30%

 

40/40

40%

 

40/38

45%

 

40/35

50%

 

40/7

Шум с нормальным распределением

10%

 

40/40

15%

 

40/40

20%

 

40/10

25%

 

40/7

30%

 

40/3

Шум с распределением  1/cos(2x)^2

10%

 

40/40

15%

 

40/35

20%

 

40/20

25%

 

40/5


 

 

Для шума с  равномерным распределением:

До 40% зашумлённости  образа распознавание происходит в большинстве случаев. 

45%-47% резкое  падение количества распознаваемых образов(при некоторых ошибках воспринимался как другой образ).

 

Для шума с  нормальным распределением:

До 20% зашумлённости образа распознавание происходит в большинстве случаев. Если уровень шума превышает 20%, то распознать данное изображение не удаётся т.к. математическое ожидание нормального распределения походит через центральную ось изображения.

Если брать  область изображения, зашумлённого на 25%-30%, с рассеиванием от математического ожидания равным дисперсии и сравнивать с равномерным распределением, то это будет эквивалентно 50%-60% зашумления.

Границы цифр 0 и 8 на изображении выходят за пределы единичной дисперсии, по этой причине нейронная сеть продолжает распознавать эти образы до 30%-35% зашумления.

 

Для шума с  распределением 1/cos(2x)^2:

При данной плотности распределения дисперсия  меньше, чем при нормальном распределении.

До 10% распознавание  происходит в большинстве случаев. От 10% до 15% наблюдаются ошибки при распознавании. Это связанно прежде всего с тем, что, например, изображение цифры «8» после подобного зашумления ближе, по хемминговому расстоянию, к изображению «6».

Если используются изображения такие как 1, 2, 4, 7 т.е. образы, которые наименее похожи на остальные, то их распознавание возможно и при зашумлении 20%. При уровне шума выше 20% распознавание не представляется возможным, т.к. треть изображения является практически полностью инвертированным.

 

 

3.1 Выводы

 

По  проведенным исследованиям качества распознавания нейронной сетью  Хемминга искаженных изображений можно сделать следующие выводы:

  1. Качество распознавания изображений в значительной мере зависит от степени искажения изображения и сходства запоминаемых эталонных изображений. Зависимость качества распознавания от сходства эталонных изображений хорошо просматривается при сравнении серий экспериментов по распознаванию образов. Из-за схожести изображений цифр 0, 8, 9, 6 при зашумлении нейронная сеть может их перепутать.
  2. Качество распознавания изображений зависит от законов распределения ПСВ – координат искажаемых пикселей, сформированных генераторами ПСВ. При распределении координат искажаемых пикселей, соответствующему равномерному закону, нейронная сеть Хемминга справляется с задачей распознавания в большинстве экспериментов лучше, чем при нормальном распределении.

 

Заключение

 

 

В результате выполнения данной работы был разработан программный комплекс, позволяющий:

  1. Моделировать работу нейронной сети Хемминга, решающей задачи распознавания искаженных изображений:
    • Обучать нейронную сеть эталонным образам.
    • Распознавать искаженные образы.
  2. Искажать изображения с заданным процентом зашумления.

Также в работе были проведены исследования качества распознавания нейронной сетью  Хемминга искаженных черно-белых изображений.

Разработанный программный комплекс в дальнейшем может быть основой более сложных  систем анализа и распознавания  образов с целью повышения  эффективности распознавания.

 

 

Библиографический список

 

  1. Хайкин С. Б. Нейронные сети: полный курс / С. Б. Хайкин. – Спт.: «Вильямс», 2005. – 866с.
  2. Уоссерман Ф. Нейрокомпьютерная техника: Теория и практика / Ф. Уоссерман. Перевод на русский язык, Ю. А. Зуев, В. А. Точенов, 1992./
  3. Л. Шапиро, Дж. Стокман Компьютерное зрение / Пер. с англ. - М.: БИНОМ. Лаборатория знаний, 2006. - 752 с, 8 с. ил.: ил.
  4. Абламейко С.В., Лагуновский Д.М. Обработка изображений: технология, методы, применение. Учебное пособие. – Мн.: Амалфея, 2000. – 304с.
  5. Заенцев И.В. Нейронные сети: основные модели: учебное пособие – Воронеж: Изд-во ВГУ, 1999. – 76 с.
  6. Осовский С. Нейронные сети для обработки информации / Пер. с польского  И.Д. Рудинского. - М.: Финансы и статистика, 2002. - 344 с: ил.
  7. Вентцель Е.С. Теория вероятностей: учеб.для вузов / Е.С. Вентцель. - 7-е изд., стер. - М.: Высш. шк., 2001. - 575 с.
  8. Шеннон Р. Имитационное моделирование систем. Искусство и наука: [пер. с англ.] / Р. Шеннон. – М.: Мир, 1978. – 421 с.
  9. Потапов В.И. Потапов И.В. Математические модели, методы и алгоритмы оптимизации надежности и технической диагностики искусственных нейронных сетей. – Омск: Изд-во ОГУП Омская областная полиграфия. - 2004г. – 220с.
  10. Кирьянов Б.Ф. Моделирование случайных величин: методические указания для студентов / Б.Ф.Кирьянов – Великий Новгород: РИС НовГУ, 2004. – 47с.
  11. Бусленко Н.П. Моделирование сложных систем / Н.П. Бусленко. – М.: Наука, 1968. – 356 с.
  12. Вентцель Е.С. Теория вероятностей: учеб.для вузов / Е.С. Вентцель. - 7-е изд., стер. - М.: Высш. шк., 2001. - 575 с.
  13. Комашинский В.И. Нейронные сети и их применение в системах управления и связи / В.И. Комашинский, Д.А. Смирнов. – М.: Горячая линия - Телеком, 2003. – 94 c.
  14. Потапов В.И. Выполнение и организация защиты выпускных квалификационных работ бакалавров: метод. указания для студентов, обучающихся по направлению 230100 "Информатика и вычислительная техника" / В.И. Потапов. – Омск: Изд-во ОмГТУ, 2007. – 15 с.
  15. Потапов В.И. Дипломное проектирование: метод. указания для студентов, обучающихся по специальности 230101 и направления подгот. бакалавров 230100 / В.И. Потапов, Б.И. Елькин, О.П. Шафеева. – Омск: Изд-во ОмГТУ, 2007. – 64 с.
  16. Фурман Я. А., Юрьев А. Н., Яншин В. В. Цифровые методы обработки и распознавания бинарных изображений.— Красноярск: Издательство Красноярского университета, 1992 - 248 с.
  17. Потапов В.И. Магистерская диссертация: методика написания, правила оформления и порядок защиты: учеб. пособие / В.И. Потапов, Д.В. Постников; ОмГТУ. - Омск: Изд-во ОмГТУ, 2010. - 59 с.
  18. ГОСТ 7.32 – 2001 Отчет о научно-исследовательской работе. Структура и правила оформления. – Взамен ГОСТ 7.32–91; введ. 2002–07–01. – М.: Изд-во стандартов, 2001. – 18с.
  19. ГОСТ 19.701 – 90 ЕСПД. Схемы алгоритмов, программ, данных и систем. – Взамен ГОСТ 19.002-80; введ. 1992-01-01. - М.: Изд-во стандартов, 1990. – 8 с.
  20. ГОСТ 7.1 – 2003 Библиографическая запись. Библиографическое описание. Общие требования и правила составления. – Взамен ГОСТ 7.1–84; введ. 2004-07-01. – М.: ИПК Изд-во стандартов, 2004
  21. Wikipedia. [Электронный ресурс]. [http://ru.wikipedia.org/wiki/].

 

Приложение А. Генератор ПСВ.

 

 

// алгоритм для  генерации непрерывной случайной  величины 

//функция распределения обратного метода непрерывной СВ     

public class InverseDistributionFunction : IDistributionFunction, IDensityFunction     

{        

private static InverseDistributionFunction func = null;

         

//метод создания        

public static InverseDistributionFunction Create()        

{            

func = new InverseDistributionFunction();            

return func;        

}         

//конструктор        

private InverseDistributionFunction()        

{            

func = this;        

}         

//возвращает значение функции в точке        

public double GetFunctionValue(double x)        

{            

if(x<Xmin())            

{                

return 0;            

}            

if(x>Xmax())            

{                

return 1;            

}            

double y = Math.Tan(2 * x) / 2 /*Math.Log(x,2)*/;  //функция распределения             

if (y<0)            

{                

return 0;            

}            

else            

{                

if (y>1)                

{                    

return 1;                

}                

else                

{                    

return y;                

}            

}        

}         

//возвращает значение обратной функции в точке         

public double GetInverseFunctionValue(double y)        

{            

if (y < 0 || y > 1)            

{                

throw new Exception("Обратная функция существует только в интервале от 0 до 1");             

}            

double x =  Math.Atan(2 * y) / 2; //обратная функция распределения             

return x;        

}

         

//Возвращает значение функции плотности в точке         

public double GetDensityFunctionValue(double x)        

{            

double y = (double)1 / (Math.Cos(2 * x) * Math.Cos(2 * x));//функция плотности

             

return y;        

}        

//возвращает математическое ожидание СВ         

public double GetExpectation()        

{            

double step = (Xmax() - Xmin()) / 100;            

double prevM = 0;            

double M = 1;            

while (Math.Abs(M - prevM) > 0.000001)            

{                

prevM = M;                

double current = 0;                

for (double x = Xmin(); x < Xmax(); x += step)                

{                    

current += step * ((x + step) * GetDensityFunctionValue(x + step) + x * GetDensityFunctionValue(x)) / 2;                 

}                

M = current;                

step /= 2;            

}            

return M;        

}         

//возвращает СКО        

public double GetMeanSquareDeviation()        

{        

 

 

            return Math.Sqrt(GetDispersion());        

}         

//возвращает дисперсию        

public double GetDispersion()        

{            

double step = (Xmax() - Xmin()) / 100;            

double prevD = 0;            

double D = 1;            

double M = this.GetExpectation();            

while (Math.Abs(D - prevD) > 0.000001)            

{                

prevD = D;                

double current = 0;                

for (double x = Xmin(); x < Xmax(); x += step)                

{                    

current += step * (Math.Pow((x + step - M), 2) * GetDensityFunctionValue(x + step) + Math.Pow((x - M), 2) * GetDensityFunctionValue(x)) / 2;                 

}                

D = current;                

step /= 2;            

}            

return D;        

}         

public double Xmin()        

{            

return this.GetInverseFunctionValue(0);        

}         

public double Xmax()        

{            

return this.GetInverseFunctionValue(1);}}    

public class InverseGenerator:IGenerator    

{        

private InverseDistributionFunction Function = null;        

Random BaseGenerator = new Random();//генератор базовой случайной величины         

//конструктор        

public InverseGenerator()        

{            

Function = InverseDistributionFunction.Create();//получаем экземпляр функции распределения         

}         

//сгенерировать очередное значение        

public double GenerateValue()        

{            

double x1 = BaseGenerator.NextDouble();// генерация очередного значения базовой случайной величины             

double result = Function.GetInverseFunctionValue(x1);//получение значения обратной функции распределения             

return result;        

}    

}

 

//алгоритм для  генерации дискретной случайной  величины

 

//дискретная функция распределения    

public class DiscreteDistributionFunction : IDistributionFunction, IDensityFunction     

{        

private static DiscreteDistributionFunction func = null;//экземпляр самой функции         

private List<Point> Values = new List<Point>();//массив точек(точки вида: значение, вероятность)         

//метод создания        

public static DiscreteDistributionFunction Create()        

{            

return func;//возвращаем существующий объект         

}         

//метод создания        

public static DiscreteDistributionFunction Create(List<Point> values)         

Информация о работе Исследование результатов работы программы-эмулятора ИНС