Классификатор на основе однослойной нейронной сети.

В этой работе построен классификатор распознающий картинки с цифрами от 0 до 9. Для реализации классификатора используется однослойная нейронная сеть.

1. 1 Модель

Классификатор представляет собой однослойную нейронною сеть(персептрон) [1,2] из 10 обрабатывающих нейронов (рис.1).

clip_image001

Рисунок 1: однослойная нейронная сеть (персептрон)

На вход нейронной сети подаётся слово X(x0 ... xn) где xi=1 или -1, описывающее образ для обработки. На выходе получаем слово Y(y0 ... y9) где yi=1 или -1. Номер j , для которого выходyj=1 , соответствует номеру класса входного образца.

2. 1.1 Параметры сети

Состояние нейрона i определим следующим образом: 

clip_image002

(1)

В качестве функции активации будем использовать пороговою функцию с порогом T=0 :

clip_image003

(2)

3. 1.2 Метод обучения

В качестве метода обучения используется дельта-правило Видроу-Хоффа [2,3] (обучение "с учителем").

wij(t+1)=wij(t)+ a * xj * eik

(3)

где

  • wij - весовой коэффициент связи i -того нейрона с j-тым входом
  • a=0.001 - коэффициент скорости обучения
  • xj - j-тый вход сети
  • eik - ошибка нейрона i на k-том образце

eik=dik - si

(4)

  • здесь si - состояние (1) нейрона idik - верный выход нейрона i на k-том образце

Так же необходимо определить :

  • Ek - ошибка сети на k-том образце

clip_image004

(5)

  • E - максимальная ошибка сети

clip_image005

(6)

  • R=0.0001 - допустимая максимальная ошибка сети

Алгоритм обучения нейронной сети построен следующим образом:

1. Инициализировать матрицу весов случайными значениями на отрезке [ -0.05 , 0.05 ].

2. Пропустить через сеть все образцы из множества учебных примеров и рассчитать ошибку сети E по (6).

3. Если ошибка E меньше допустимой максимальной ошибки R то конец работы.

4. В случайном порядке подать на вход сети все образцы из множества учебных примеров, для каждого образца k и выхода сети yk рассчитать ошибку ek по (4) и скорректировать весаw по (3).

5. перейти на п.2

4. 2 Реализация

В этом разделе представлены две реализации, описанной выше модели классификатора, которые отличаются размерностью сети. Первый вариант - простой, работает с фиксированным набором входных паттернов, представленных в текстовом виде. Второй вариант - работает с картинками в формате BMP. На вход классификатора подается изображение цифр от 0 до 9 , на выходе получаем слово Y(y0 ... y9) где yi=1 или -1. Номер j , для которого выход yj=1 , соответствует номеру класса входного образца.

5. 2.1 Текстовый вариант

Размерность входного изображения 5 x 7 точек, т.е. всего 5 x 7 = 35 входов сети.

  • Результат работы программы на рис.2.

clip_image006

Рисунок 2: Результат работы первой программы

  • Исходные тексты программы : [ C++ ] [ Java ]

6. 2.2 Работа с картинками

На вход классификатора подаются картинки в формате BMP, размером 17 x 31 точек, представляющие собой матрицы 51 x 31 байт, таким образом входной (или распределительный) слой сети состоит из 51 x 31 = 1581 нейронов. В программе используется библиотека для работы с картинками GdkPixbuf v.2.GdkPixbuf v.2.

  • Результат работы программы на рис.3.
  • image
  • Исходные тексты программы [ здесь ]

Автор: Е.С.Борисов оригинал статьи

Предлагаю ознакомиться с аналогичными статьями: