Автор работы: Пользователь скрыл имя, 01 Июня 2013 в 10:43, курсовая работа
В качестве научного предмета искусственные нейронные сети впервые заявили о себе в 40-е годы. Стремясь воспроизвести функции человеческого мозга, исследователи создали простые аппаратные (а позже программные) модели биологического нейрона и системы его соединений. Когда нейрофизиологи достигли более глубокого понимания нервной системы человека, эти ранние попытки стали восприниматься как весьма грубые аппроксимации. Тем не менее на этом пути были достигнуты впечатляющие результаты, стимулировавшие дальнейшие исследования, приведшие к созданию более изощренных сетей. Первое систематическое изучение искусственных нейронных сетей было предпринято Маккалокком и Питтсом в 1943 г.
Введение
1.Аналитическая часть
1.1 Содержательная и математическая постановка решаемой задачи
1.2 Описание возможностей ПС MATLAB 6.1 и тулбокса NNT
1.2.1 Структура ПС Matlab
1.3 GUI-интерфейс для ППП NNT
1.4 Описание возможностей и особенностей использования приложений
Notebook
1.5 Возможности версии MATLAB 6.1
2.Проектная часть
2.1 Описание назначения, состава и функций линейной сети
2.2
Программная реализация линейной сети
2.2.1
Создание модели линейной сети
2.2.2
Обучение линейной сети
2.3 Детальное описание особенностей выполнения
демонстрационного примера
Заключение
Список литературы
Рис. 6
В данном случае нами выбрана переменная network 1, которая принадлежит к классу network object и описывает нейронную сеть. После того как эта переменная экспортирована в рабочую область, можно, например, построить модель нейронной сети в системе Simulink с помощью оператора gensim.
Диалоговая панель Network показана на рис. 7
Рис. 7
Она открывается только в том случае, когда в окне Network/Data Manager выделена созданная сеть и становятся активными кнопки View, Initialize, Simulate, Train, Adapt.
Панель имеет 6 закладок:
View (Просмотреть) - структура сети;
Initialize (Инициализация) - задание начальных весов и смещений;
Simulate (Моделирование) - моделирование сети;
Train (Обучение) - обучение сети;
Adapt (Адаптация) - адаптация и настройка параметров сети;
Weights (Веса) - просмотр установленных весов и смещений.
Notebook (Блокнот) - это специальное приложение
системы MATLAB, позволяющее готовить с помощью
текстового процессора (редактора) Microsoft
Word 6.0/7.0/8.0 электронные книги с полноценным
текстовым описанием, с различным стилевым
оформлением и "живыми" примерами.
Таким образом, это средство - очередное
достижение разработчиков MATLAB в визуализации
всехэтаповработыссистемой.
Notebook обеспечивает объединение возможностей
текстовых процессоров класса Word с возможностями
системы MATLAB путем включения в произвольные
тексты документов, создаваемых этими
редакторами, действующих ячеек ввода
и вывода. При этом изменение исходных
данных в ячейках ввода ведет к изменению
результатов вычислений в связанных с
ними ячейках вывода. Это и обеспечивает
"оживление" отдельных примеров и
электронных книг на базе приложения Notebook.
В ячейках вывода может отображаться любая
информация - числа, векторы, матрицы, рисунки
и т. д.
В основе Notebook лежит механизм динамической связи (DDE
- Dynamic Data Exchange) между различными приложениями
в операционных системах. При этом возможна
передача изменяемых данных из одного
приложения в другое и наоборот. Приложение,
передающее данные, называют сервером,
а принимающее данные - клиентом. В системе
"Word - MATLAB", по существу реализованной
в Notebook, обе программы могут играть роли
сервера и клиента.
1.5 Возможности версии MATLAB 6.1
Новейшая версия системы MATLAB 6.1 характеризуется целым рядом новых и важных возможностей:
II ПРОЕКТНАЯ ЧАСТЬ
2.1 Описание назначения, состава и функций линейной сети
Согласно общепринятому в науке принципу, если более сложная модель не дает лучших результатов, чем более простая, то из них следует предпочесть вторую. В терминах аппроксимации отображений самой простой моделью будет линейная, в которой подгоночная функция определяется гиперплоскостью. В задаче классификации гиперплоскость размещается таким образом, чтобы она разделяла собой два класа (линейная дискриминантная функция); в задаче регрессии гиперплоскость должна проходить через заданные точки. Линейная модель обычно записывается с помощью матрицы NxN и вектора смещения размера N. На языке нейронных сетей линейная модель представляется сетью без промежуточных слоев, которая в выходном слое содержит только линейные элементы (то есть элементы с линейной функцией активации). Веса соответствуют элементам матрицы, а пороги - компонентам вектора смещения. Во время работы сеть фактически умножает вектор входов на матрицу весов, а затем к полученному вектору прибавляет вектор смещения. Линейная сеть является хорошей точкой отсчета для оценки качества построенных Вами нейронных сетей. Может оказаться так, что задачу, считавшуюся очень сложной, можно успешно не только нейронной сетью, но и простым линейным методом. Если же в задаче не так много обучающих данных, то, вероятно, просто нет оснований использовать более сложные модели.
Линейную сеть с одним нейроном, можно создать следующим образом
clear, net = newlin([-1 1; -1 1],1);
Первый входной аргумент задает диапазон изменения элементов вектора входа; второй аргумент указывает, что сеть имеет единственный выход. Начальные веса и смещение по умолчанию равны нулю.
Присвоим весам и смещению следующие значения
net.IW{1,1} = [2 3]; net.b{1} =[-4];
Теперь можно промоделировать линейную сеть для следующего предъявленного вектора входа
p = [5;6];
a = sim(net,p)
a =
24
В отличие от многих других сетей настройка линейной сети для заданного обучающего множества может быть выполнена посредством прямого расчета с использованием М-функции newlind.
Предположим, что заданы следующие векторы, принадлежащие обучающему множеству
clear, P = [1 -1.2]; T = [0.5 1];
Построим линейную сеть и промоделируем ее
net = newlind(P,T); net.IW{1,1}, net.b
Y = sim(net, P)
ans =
-0.2273
ans =
[0.7273]
Y =
0.5000 1.0000
Выход сети соответствует целевому вектору.
Зададим следующий диапазон весов и смещений, рассчитаем критерий качества обучения и построим его линии уровня:
w_range=-1:0.1: 0; b_range=0.5:0.1:1;
ES = errsurf(P,T, w_range, b_range, 'purelin');
contour(w_range, b_range,ES,20)
hold on
plot(-2.2727e-001,7.2727e-001, 'x') % Рис.5.4.
hold off
На графике знаком ""x" отмечены оптимальные значения веса и смещения для данной сети.
Обратимся к тому же примеру,
который использовался при
clear, P = [1 -1.2];% Вектор входов
T= [0.5, 1]; % Вектор целей
% Максимальное значение параметра обучения
maxlr = 0.40*maxlinlr(P,'bias');
% Создание линейной сети
net = newlin([-2,2],1,[0],maxlr);
% Расчет функции критерия качества
w_range=-1:0.2:1; b_range=-1:0.2:1;
ES = errsurf(P,T, w_range, b_range, 'purelin');
% Построение поверхности функции критерия качества
surfc(w_range, b_range, ES)
В процессе обучения траектория обучения будет перемещаться из начальной точки в точку минимума критерия качества. Выполним расчет и построим траекторию обучения линейной сети для заданных начальных значений веса и смещения.
% Расчет траектории обучении
x = zeros(1,50); y = zeros(1,50);
net.IW{1}=1; net.b{1}= -1;
x(1) = net.IW{1}; y(1) = net.b{1};
net.trainParam.goal = 0.001;
net.trainParam.epochs = 1;
% Цикл вычисления весов и смещения для одной эпохи
for i = 2:50,
[net, tr] = train(net,P,T);
x(i) = net.IW{1};
y(i) = net.b{1};
end
TRAINB, Epoch 0/1, MSE 5.245/0.001.
TRAINB, Epoch 1/1, MSE 2.049/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 2.049/0.001.
TRAINB, Epoch 1/1, MSE 0.815178/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.815178/0.001.
TRAINB, Epoch 1/1, MSE 0.330857/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.330857/0.001.
TRAINB, Epoch 1/1, MSE 0.137142/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.137142/0.001.
TRAINB, Epoch 1/1, MSE 0.0580689/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.0580689/0.001.
TRAINB, Epoch 1/1, MSE 0.0250998/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.0250998/0.001.
TRAINB, Epoch 1/1, MSE 0.0110593/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.0110593/0.001.
TRAINB, Epoch 1/1, MSE 0.00495725/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.00495725/0.001.
TRAINB, Epoch 1/1, MSE 0.00225533/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.00225533/0.001.
TRAINB, Epoch 1/1, MSE 0.00103897/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.00103897/0.001.
TRAINB, Epoch 1/1, MSE 0.000483544/0.001.
TRAINB, Maximum epoch reached.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
TRAINB, Epoch 0/1, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
% Построение линий уровня и траектории обучении
clf, contour(w_range, b_range, ES, 20), hold on
plot(x, y,'-*'), grid on, hold off
Значения веса и смещения на каждом шаге обучения; примерно за 10 шагов при заданной точности (пороговое значение критерия качества) 0.001 получим w = -0.22893, b = 0.70519. Это согласуется с решением, полученным с использованием процедуры адаптации.
Если не строить траектории процесса обучения, то можно выполнить обучение, обратившись к М-функции train только один раз:
net.IW{1}=1; net.b{1}= -1;
net.trainParam.epochs = 50;
net.trainParam.goal = 0.001;
[net, tr] = train(net,P,T);
net.IW, net.b
TRAINB, Epoch 0/50, MSE 5.245/0.001.
TRAINB, Epoch 11/50, MSE 0.000483544/0.001.
TRAINB, Performance goal met.
ans =
[-0.2289]
ans =
[0.7052]
Если повысить точность обучения до значения 0.00001, то получим следующие результаты
net.trainParam.goal = 0.00001;
[net, tr] = train(net,P,T);
net.IW, net.b
TRAINB, Epoch 0/50, MSE 0.000483544/1e-005.
TRAINB, Epoch 6/50, MSE 5.55043e-006/1e-005.
TRAINB, Performance goal met.
ans =
[-0.2279]
ans =
[0.7249]
Повышение точности на два порядка приводит к уточнению значений параметров во втором знаке.