- •Лабораторные работы по курсу “Методы искусственного интеллекта”
- •Библиографический список
- •Общие сведения о мнспр
- •Аппроксимация функций на мнспр
- •Классификация на многослойной нейронной сети прямого распространения
- •Распознавание символов на многослойной нейронной сети прямого распространения.
- •Распознавание образов на Нейронной Сети Хопфилда.
Аппроксимация функций на мнспр
Возможность аппроксимации функций на МНСПР покажем на примере y(x) = sin(x)*exp(-0.1*x). График функции приведен на рис. 1.6 (точками обозначены известные данные). Сначала необходимо подготовить входные и выходные данные для обучения. Для этого зададим вектор х в диапазоне [0 6] с шагом /6 и рассчитаем соответствующие значения y(x).
% КОД 1. Создание данных
dx = 6; % число примеров на pi
x = 0:pi/dx:6*pi; % входной вектор для обучения (1xNp)
y = sin(x).*exp(-0.1*x); % выходной вектор для обучения (1xNp)
Необходимо заметить, что при вычислении y(x) состоящего из произведения векторов sin(x) и exp(-0.1*x) следует использовать операцию поэлементного умножения “.*”.
С помощью команды plot можно посмотреть график исходных данных (рис. 1.6).
figure(1),plot(x, y,'ro-') % график исходных данных
Рис. 1.6. Функция sin(x)*exp(-0.1*x)
Далее необходимо создать и обучить МНСПР по полученным примерам x и y.
% КОД 2. Создание и обучение НС
NN = 3; % число нейронов в 1-м слое
net = newff(minmax(x), [NN 1],{'tansig', 'purelin'},'trainlm');
net.trainParam.epochs = 500; % задаем число итераций обучения
net.trainParam.goal = 1e-5; % задаем требуемую точность обучения
net = train(net, x, y); % обучаем НС
Ход обучения НС и его результаты отражаются в отдельном окне (в виде графика) и в командном окне MATLAB (в виде таблицы). При NN = 3 НС не достигла требуемой точности обучения (среднеквадратичная ошибка по всем примерам MSE=0.02). Следовательно, количество нейронов в сети явно недостаточно. Увеличиваем количество нейронов NN = 50 и повторяем обучение, которое завершается успешно (MSE=4.3e-006).
Для оценки качества аппроксимации (обобщения) обученной МНСПР необходимо подготовить тестовую выборку с меньшей дискретизацией (т.е. требуется увеличить количество примеров) и протестировать МНСПР.
% КОД 3. Создание тестовых данных и тестирование НС
dx = 600; % число примеров на pi увеличим в 100 раз
xe = 0:pi/dx:6*pi; % входной вектор для тестирования
ye = sin(xe).*exp(-0.1*xe); % выходной вектор для тестирования
y_nn = sim(net,xe); % тестируем НС
MSE = mse(ye-y_nn) % расчет среднеквадратичной ошибки.
figure(1),plot(x, y,'ro', xe, ye, 'b', xe, y_nn, 'k')
По полученному графику видно, что выход МНСПР в обученных точках (на рис.1.7 эти точки обозначены кружками) совпадает со значением эталонной функции, а в необученных нет. Это вызвано избыточным количеством нейронов в сети. Поэтому для увеличения точности аппроксимации требуется уменьшить количество нейронов в промежуточных слоях МНСПР.
Рис. 1.7. Аппроксимация функция sin(x)*exp(-0.1*x) на МНСПР
Для оценки аппроксимации также можно строить график ошибки.
figure(2),plot(xe, ye-y_nn) % график ошибки
Задание. Обучить НС на функцию y(x) (из табл. 1) в диапазоне [0 6*pi] с точностью 10e-5 и исследовать влияние количества нейронов на качество аппроксимации. Последовательность действий:
1.Записать программу в м-файле на основании приведенного выше примера (код 1, 2 и 3) для функции y(x) из таблицы 1.1 в соответствии с вариантом.
2. Запустить программу (обучения и тестирования НС). Зарисовать график полученный на figure(1) и записать значение значения среднеквадратичной ошибки MSE для заданного NN. Повторить обучение при одном и том же количестве нейронов 3-5 раз (т.к. начальные значения параметров НС выбираются случайным образом и существенно могут влиять на ход обучения).
3. Повторить пункт 2, изменяя количество нейронов в скрытом слое NN=3,5,7,9,12,25,50,70.
4. Определить недостаточное и избыточное количество нейронов скрытого слоя NN для данной обучающей выборки визуально по рисунку и по MSE (среднее). Построить график зависимости значения ошибки MSE (среднее) от числа нейронов NN.
Отчет по Заданию должен включать графики аппроксимации функции для заданного количества нейронов NN, зависимость значения ошибки MSE от числа нейронов NN.
Таблица 1.1
№ Варианта |
Вид функции |
1 |
y(x) = sin(x); |
2 |
y(x) = sin(x+pi/2); |
3 |
y(x) = cos(x); |
4 |
y(x) = cos(x+pi/2); |
5 |
y(x) = sin(x) + cos(x); |
6 |
y(x) = sin(x) + atan(x); |
7 |
y(x) = cos(x) + atan(x); |
8 |
y(x) = sin(x+pi/2) + atan(x); |
9 |
y(x) = cos(x+pi/2) + atan(x); |
Контрольные вопросы:
1. Как влияет недостаточное количество нейронов в НС на аппроксимацию функции?
2. Как влияет избыточное количество нейронов в НС на аппроксимацию функции?
3. По каким оценкам можно определить, что НС обладает нужным количеством нейронов?
4. Какие методы существуют для борьбы с переобучением в НС?
Лабораторная работа № 2
