В этой работе построен классификатор распознающий картинки с цифрами от 0 до 9. Для реализации классификатора используется однослойная нейронная сеть.
Классификатор представляет собой однослойную нейронною сеть(персептрон) [1,2] из 10 обрабатывающих нейронов (рис.1).
Рисунок 1: однослойная нейронная сеть (персептрон) |
На вход нейронной сети подаётся слово X(x0 ... xn) где xi=1 или -1, описывающее образ для обработки. На выходе получаем слово Y(y0 ... y9) где yi=1 или -1. Номер j , для которого выходyj=1 , соответствует номеру класса входного образца.
Состояние нейрона i определим следующим образом:
(1) |
В качестве функции активации будем использовать пороговою функцию с порогом T=0 :
(2) |
В качестве метода обучения используется дельта-правило Видроу-Хоффа [2,3] (обучение "с учителем").
(3) |
где
- wij - весовой коэффициент связи i -того нейрона с j-тым входом
- a=0.001 - коэффициент скорости обучения
- xj - j-тый вход сети
- eik - ошибка нейрона i на k-том образце
(4) |
- здесь si - состояние (1) нейрона i, dik - верный выход нейрона i на k-том образце
Так же необходимо определить :
- Ek - ошибка сети на k-том образце
(5) |
- E - максимальная ошибка сети
(6) |
- R=0.0001 - допустимая максимальная ошибка сети
Алгоритм обучения нейронной сети построен следующим образом:
1. Инициализировать матрицу весов случайными значениями на отрезке [ -0.05 , 0.05 ].
2. Пропустить через сеть все образцы из множества учебных примеров и рассчитать ошибку сети E по (6).
3. Если ошибка E меньше допустимой максимальной ошибки R то конец работы.
4. В случайном порядке подать на вход сети все образцы из множества учебных примеров, для каждого образца k и выхода сети yk рассчитать ошибку ek по (4) и скорректировать весаw по (3).
5. перейти на п.2
В этом разделе представлены две реализации, описанной выше модели классификатора, которые отличаются размерностью сети. Первый вариант - простой, работает с фиксированным набором входных паттернов, представленных в текстовом виде. Второй вариант - работает с картинками в формате BMP. На вход классификатора подается изображение цифр от 0 до 9 , на выходе получаем слово Y(y0 ... y9) где yi=1 или -1. Номер j , для которого выход yj=1 , соответствует номеру класса входного образца.
Размерность входного изображения 5 x 7 точек, т.е. всего 5 x 7 = 35 входов сети.
- Результат работы программы на рис.2.
Рисунок 2: Результат работы первой программы |
На вход классификатора подаются картинки в формате BMP, размером 17 x 31 точек, представляющие собой матрицы 51 x 31 байт, таким образом входной (или распределительный) слой сети состоит из 51 x 31 = 1581 нейронов. В программе используется библиотека для работы с картинками GdkPixbuf v.2.GdkPixbuf v.2.
- Результат работы программы на рис.3.
- Исходные тексты программы [ здесь ]
Автор: Е.С.Борисов оригинал статьи
0 коммент.:
Отправить комментарий