- •Моделирование нейронных сетей в среде matlab
- •Содержание
- •Введение
- •Лабораторная работа № 1 Введение в систему matlab
- •1.1. Работа в системе matlab
- •1.2. Вычисление арифметических выражений
- •1.3. Вектора и матрицы
- •1. Работа с векторами
- •2. Работа с матрицами
- •Лабораторная работа № 2 Введение в систему matlab (продолжение)
- •2.1. Построение графиков функций одной переменной
- •2.2. Программирование в matlab
- •3. Графика
- •4. Программирование
- •Лабораторная работа № 3 Работа с пакетом расширения Neural Networks Toolbox в диалоговом режиме
- •Лабораторная работа № 4 Работа с пакетом расширения Neural Networks Toolbox в командном режиме
- •Лабораторная работа № 5 Аппроксимация функций одной переменной
- •Лабораторная работа № 6 Аппроксимация многомерных функций
- •Лабораторная работа № 7 Сглаживание функций с помощью нс и эффект переобучения
- •Лабораторная работа № 8 Нахождение параметров формул по опытным данным
- •Лабораторная работа № 9 Нейросетевой классификатор
- •Лабораторная работа № 10 Распознавание образов
- •Лабораторная работа № 11 Экспертные системы
- •Лабораторная работа № 12 Прогнозирование
- •Приложение
- •Литература
Лабораторная работа № 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 (например, черные на белом фоне), но и с добавлением шума (например, при сканировании текста со старой, пожелтевшей бумаги) процесс обучения необходимо проводить по следующей схеме:
Обучение без шума.
Обучение с добавлением шумов путем изменения элементов исходной матрицы P прибавлением небольших случайных отклонений.
Переобучение без шума, для обеспечения корректной классификации первоначальных букв.
Второй этап может состоять из многократного обучения с помощью сложной обучающей матрицы, полученной соединением «бесшумных» матриц и матриц с разным уровнем зашумленности:
% ОБУЧЕНИЕ БЕЗ ШУМА
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 символов, представленных в виде матриц 35:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. Разработать, обучить и исследовать нейронную сеть, предназначенную для распознавания 5 символов, представленных в виде матриц 45:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Произвести тестирование нейронной сети при добавлении шума.
5. Разработать, обучить и исследовать нейронную сеть, предназначенную для распознавания цифр от 0 до 9, представленных в виде матриц 35. Произвести тестирование нейронной сети при добавлении шума.