Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Клюкин_Николаенков.doc
Скачиваний:
137
Добавлен:
18.11.2019
Размер:
1.11 Mб
Скачать

Лабораторная работа № 10 Распознавание образов

Цель – построение, обучение и тестирование нейронной сети, предназначенной для распознавания образов.

Задание

Построить и обучить нейронную сеть, которая могла бы решать задачу распознавания символов. Провести тестирование нейронной сети при добавлении шума к изображениям символов.

Пример

Задача распознавания образов (например, рукописных символов или звуковых сигналов) относится к задачам классификации. Рассмотрим для примера возможность распознавания четырех латинских букв X, Y, L, I с помощью многослойной НС с обучением по методу обратного распространения ошибки [9].

Буквы можно представить в виде матриц 3  3:

X Y I L

1 0 1 1 0 1 0 1 0 1 0 0

0 1 0 0 1 0 0 1 0 1 0 0

1 0 1 0 1 0 0 1 0 1 1 1

В соответствии с таким представлением входной сигнал для нейронной сети может быть представлен в виде развернутого растра – вектора длиной 9.

Например, для буквы X это 101010101 и тогда подготовка исходных данных и целевого вектора в Matlab записывается следующим образом:

%Распознавание букв X Y L I

clear;

X = [1 0 1 0 1 0 1 0 1];

Y = [1 0 1 0 1 0 0 1 0];

L = [1 0 0 1 0 0 1 1 1];

I = [0 1 0 0 1 0 0 1 0];

P = [X' Y' L' I'];

T = [1 2 3 4];

T = ind2vec(T);

Параметры сети с обучением по методу обратного распространения ошибки выбираются с учетом того, что у нас данные представлены четырьмя классами (буквы) и в двоичном виде (функция активации logsig меняется в пределах от 0 до 1):

net = newff(minmax(P),[10 4],{'logsig' 'logsig'});

Поскольку созданная НС должна распознавать буквы, представленные не только в идеальном виде 0 и 1 (например, черные на белом фоне), но и с добавлением шума (например, при сканировании текста со старой, пожелтевшей бумаги) процесс обучения необходимо проводить по следующей схеме:

  1. Обучение без шума.

  2. Обучение с добавлением шумов путем изменения элементов исходной матрицы P прибавлением небольших случайных отклонений.

  3. Переобучение без шума, для обеспечения корректной классификации первоначальных букв.

Второй этап может состоять из многократного обучения с помощью сложной обучающей матрицы, полученной соединением «бесшумных» матриц и матриц с разным уровнем зашумленности:

% ОБУЧЕНИЕ БЕЗ ШУМА

net.trainParam.epochs = 300;

net = train(net, P, T);

% ОБУЧЕНИЕ С ШУМОМ

net.trainParam.epochs = 100;

T1 = [T T T T];

for pass = 1:10

P1 = [P, P, ...

(P + randn(9,4)*0.1), ...

(P + randn(9,4)*0.2)];

net = train(net,P1,T1);

end

% ОБУЧЕНИЕ БЕЗ ШУМА

netn.trainParam.epochs = 300;

net = train(net,P,T);

Программа заканчивается тестированием полученной сети подачей на вход исходных символов зашумленных в разной степени. Как можно убедиться, созданная сеть успешно справляется с распознаванием символов, если коэффициент зашумленности не превышает 0.4:

% ТЕСТИРОВАНИЕ СЕТИ

noise_range = 0:.05:.5;

disp(['Уровень шума' ' Классификация'])

for noiselevel = noise_range

P = P + randn(9,4)*noiselevel;

y = vec2ind(compet(sim(net,P)));

disp([num2str(noiselevel,'\t%10.2f\t\t'), mat2str(y)])

end

Уровень шума Классификация

0.00 [1 2 3 4]

0.05 [1 2 3 4]

0.10 [1 2 3 4]

0.15 [1 2 3 4]

0.20 [1 2 3 4]

0.25 [1 2 3 4]

0.30 [1 2 3 4]

0.35 [1 3 3 4]

0.40 [1 2 3 4]

0.45 [2 4 3 4]

0.50 [2 3 3 4].

Кроме добавления шумов, обученная сеть должна справляться с распознаванием «испорченных» символов, т.е. символов, в изображении которых нули поменялись на единицы или наоборот (это может произойти при передаче данных). В изображении каждой буквы поменяем один «пиксель» и введем данные в сеть:

X1 = [1 1 1 0 1 0 1 0 1];

Y1 = [1 0 1 0 1 1 0 1 0];

L1 = [1 0 0 1 1 0 1 1 1];

I1 = [0 1 0 0 1 0 0 0 0];

P1 = [X1' Y1' L1' I1'];

y1 = vec2ind(compet(sim(net,P1)))

Распознавание и в этом случае прошло успешно:

y1 =

1 2 3 4

Более сложная задача распознавания 26 букв английского алфавита, представленных в виде матриц размером 5х7, рассматривается в демонстрационной программе APPCR1, входящей в пакет расширений Neural Networks в Matlab. Выполнить эту программу в режиме «шаг за шагом» можно, набрав в командной строке appcr1.

Порядок выполнения работы:

1) Создать обучающую выборку для НС.

Для этого в MATLAB представить символы в виде столбцов матрицы, которая будет подаваться на вход НС. Целевые данные представить в виде вектора, элементы которого указывают на принадлежность соответствующего (по порядку следования столбцов матрицы входных значений) вектора заданному классу. Преобразовать целевой вектор в матрицу с числом строк, равным количеству классов.

2) Подобрать вид и архитектуру (число слоёв, число нейронов в слое, скорость обучения и др.) нейронной сети таким образом, чтобы при проверке работы нейронной сети на обучающей выборке выходное значение не отличалось от фактического результата.

3) Применить процедуру обучения с включением шумов для выбранной НС.

4) Протестировать сеть на зашумленной и испорченной выборках. Определить уровень «зашумленности» при котором сеть перестает распознавать символы.

В арианты заданий

1. Цифры задаются 7-сегментным индикатором (индекс на конвертах):

Р азработать, обучить и исследовать нейронную сеть, предназначенную для распознавания цифр от 0 до 9, представляемых такими индикаторами. Тестировать сеть при поломке одного из сегментов индикатора.

2. Цифры задаются 11-сегментным индикатором:

Разработать, обучить и исследовать нейронную сеть, предназначенную для распознавания цифр от 0 до 9, представляемых такими индикаторами. Тестировать сеть при поломке одного из сегментов индикатора.

3. Разработать, обучить и исследовать нейронную сеть, предназначенную для распознавания 6 символов, представленных в виде матриц 35:

Произвести тестирование нейронной сети при добавлении шума.

4. Разработать, обучить и исследовать нейронную сеть, предназначенную для распознавания 5 символов, представленных в виде матриц 45:


Произвести тестирование нейронной сети при добавлении шума.

5. Разработать, обучить и исследовать нейронную сеть, предназначенную для распознавания цифр от 0 до 9, представленных в виде матриц 35. Произвести тестирование нейронной сети при добавлении шума.