среда, 13 июня 2012 г.

Распознавание изображений (персептрон)


Лабораторная работа

по курсу 

"Интеллектуальные системы":

Распознавание изображений с помощью персептрона

Выполнил 
студент группы ИУ5-81
Баришок Н.И.


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

Цель работы
Изучить принципы работы и алгоритм обучения простейших искусственных нейронных сетей (НС).

Требования к исходным данным и функциональности компьютерной программы
  • В программе должна быть реализована возможность задания обучающей выборки из внешних файлов изображений
  • Изображения должны быть черно-белыми (bitmap) и размером не менее 9 (3x3) пикселей.
  • Программа должна иметь два режима работы: обучения и распознавания.
  • Обучение должно производиться по стандартному алгоритму обучения персептрона с использованием дельта-правила.
  • В программе должны задаваться следующие настройки:
    • количество входов нейрона, которое соответствует общему числу пикселей изображения
    • коэффициент скорости обучения (если его значение постоянно)
    • правильные варианты элементов обучающей выборки
    • размер ошибки, при котором обучение персепетрона завершается (опционально)
  • На экранной форме режима обучения должны отображаться:
    • элементы обучающей выборки (изображения)
    • настройки алгоритма обучения
    • текущие (итоговые) веса нейронов и значение порога активационной функции
    • протоколы результатов обучения (значения весов для каждой итерации)
  • На экранной форме режима распознавания должны отображаться:
    • распознаваемое изображение (должно выбираться из всего множества)
    • результат распознавания
    • веса нейронов и значение порога активационной функции
    • значения выходов всех нейронов до и после применения активационной функции
Алгоритмы обучения и распознавания персептрона:

Персептрон - простейшая однонаправленная нейронная сеть.


В качестве функции f применяется биполярная функция активации:
Сигнал Х на выходе линейной части перспетрона задается выражением

здесь w0 = v, u0=-1
Задача персептрона заклчается в классификации вектора u=[u1,...,un]T в смысле отнесения его к классу либо L1 или L2. Персептрон относит вектор к классу L1, если выхдной сигнал равен 1, и l2, если -1. После этого персептрон разделяет N-мерное пространство входных векторов u на 2 полупространства, разделяемые (n-1)-мерной плоскостью, задаваемой уравнением
Обучение персептрона заключается в реккурентной коррекции вектора весов w(n), согласно формулам:
Пошаговое выполнение алгоритма в программе:


Участок кода, ответственный за подбор весов персептрона:
double delta = 0;
            this.InitWeights();
            for (int i = 0; i < etalonPictures.Count; i++)
            {
                ObservableCollection<bool> currentitem = etalonPictures.ElementAt(i);
                double value = 0;
                int j = 0;
                foreach (bool item in currentitem)
                {
                    value += Convert.ToInt32(item) * m_weights[j];
                    j++;
                }

                delta = Math.Round((1 - value) * this.RightTrainingSpeed, 2);
                this.UpdataWeights(currentitem, delta);
            }
            for (int i = 0; i < trainingPictures.Count; i++)
            {
                ObservableCollection<bool> currentitem = trainingPictures.ElementAt(i);
                double value = 0;
                int j = 0;
                foreach (bool item in currentitem)
                {
                    value += Convert.ToInt32(item) * m_weights[j];
                    j++;
                }

                delta = Math.Round((0 - value) * this.WrongTrainingSpeed, 2);
                this.UpdataWeights(currentitem, delta);
            }
            ObservableCollection<bool> item1 = etalonPictures.ElementAt(0);
            double temp = this.EvaluateThreshHoldFunc(item1);
            m_thresholdFunc = Math.Round(temp, 2) - 0.01;

Полный проект решения можно найти здесь

При выполнении ЛР были использованы следующие источники:
-"интеллектуальная" часть:
+Рутковская Д., Пилиньский М., Рутковский Л. - Нейронные сети, генетические алгоритмы и нечеткие системы (2006)
+конспекты лекций
-программная часть:
+msdn.microsoft.com
+stackoverflow.com
+статьи по теме: mvvm-pattern in wpf
Описание разработки:
-язык программирования: C#
-техннология: WPF
-среда разработки: VS 2010
* для корректной работы прораммы на ПК необходимо установить:
-.net frameork v4.0
-entity framework v4.2

1 комментарий:

  1. Здравствуйте. Есть возможность перезалить проект? Ссылка уже недействительна. Заранее спасибо.

    ОтветитьУдалить