Линейная сеть с зависимыми данными

Автор работы: Пользователь скрыл имя, 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 Детальное описание особенностей выполнения
демонстрационного примера
Заключение
Список литературы

Прикрепленные файлы: 1 файл

9.doc

— 420.00 Кб (Скачать документ)

  Рис. 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 (Веса) - просмотр установленных весов и смещений.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      1.4 Описание возможностей и особенностей использования Notebook

 

    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 характеризуется целым рядом новых и важных возможностей:

  • доведенное до более чем 600 число встроенных функций и команд;
  • новый интерфейс с набором инструментов для управления средой, включающий в себя окно команд (Command Window), окно истории команд (Command History), браузер рабочей области (Workspace Browser) и редактор массивов (Array Editor);
  • новые инструменты, позволяющие при помощи мыши интерактивно редактировать и форматировать графики, оптимизировать их коды и затраты памяти на графические команды и атрибуты;
  • улучшенные алгоритмы на основе оптимизированной библиотеки LAPACK;
  • новая библиотека FFTW (быстрых преобразований Фурье);
  • ускоренные методы интегральных преобразований;
  • новые, более мощные и точные, алгоритмы интегрирования дифференциальных уравнений и квадратур;
  • новые современные функции визуализации: вывод на экран двумерных изображений, поверхностей и объемных фигур в виде прозрачных объектов;
  • новая инструментальная панель Camera для управления перспективой и ускорение вывода графики с помощью OpenGL;
  • новый интерфейс для вызова Java-процедур и использования Java-объектов непосредственно из MATLAB;
  • новые, современные инструменты проектирования графического пользовательского интерфейса;
  • обработка (регрессия, интерполяция, аппроксимация и вычисление основных статистических параметров) графических данных прямо из окна графики;
  • новое приложение MATLAB для системы разработки Visual Studio, позволяющее автоматически, непосредственно из Microsoft Visual Studio, преобразовывать Си и Си++ коды в выполняемые MATLAB файлы (МЕХ-файлы);
  • интеграция с системами контроля версий кода, такими как Visual Source Safe;
  • новый интерфейс (последовательный порт) для обмена данными с внешним оборудованием из MATLAB;
  • существенно обновленные пакеты расширения, в частности новые версии пакета моделирования динамических систем Simulink 4 и Real Time Workshop 4;
  • Усовершенствование пользовательского интерфейса:
    • новый графический отладчик для интерактивного поиска и диагностики ошибок в модели;
    • новый однооконный режим для открытия подсистем;
    • контекстное меню для блок-диаграмм (открывается щелчком правой кнопки мыши) как в Windows, так и в Unix версиях;
    • новый диалог Finder для поиска моделей и библиотек.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

II ПРОЕКТНАЯ ЧАСТЬ

 2.1 Описание назначения, состава и функций линейной сети

Согласно общепринятому  в науке принципу, если более сложная  модель не дает лучших результатов, чем  более простая, то из них следует  предпочесть вторую. В терминах аппроксимации отображений самой простой моделью будет линейная, в которой подгоночная функция определяется гиперплоскостью. В задаче классификации гиперплоскость размещается таким образом, чтобы она разделяла собой два класа (линейная дискриминантная функция); в задаче регрессии гиперплоскость должна проходить через заданные точки. Линейная модель обычно записывается с помощью матрицы NxN и вектора смещения размера N.    На языке нейронных сетей линейная модель представляется сетью без промежуточных слоев, которая в выходном слое содержит только линейные элементы (то есть элементы с линейной функцией активации). Веса соответствуют элементам матрицы, а пороги - компонентам вектора смещения. Во время работы сеть фактически умножает вектор входов на матрицу весов, а затем к полученному вектору прибавляет вектор смещения. Линейная сеть является хорошей точкой отсчета для оценки качества построенных Вами нейронных сетей. Может оказаться так, что задачу, считавшуюся очень сложной, можно успешно не только нейронной сетью, но и простым линейным методом. Если же в задаче не так много обучающих данных, то, вероятно, просто нет оснований использовать более сложные модели.

 

 

 

2.2 Программная  реализация линейной сети

2.2.1 Создание модели линейной сети.

Линейную сеть с одним  нейроном, можно создать следующим образом

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

 2.2.2 Обучение линейной сети.

Процедура настройки.

В отличие от многих других сетей настройка линейной сети для заданного обучающего множества может быть выполнена посредством прямого расчета с использованием М-функции 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]

Повышение точности на два  порядка приводит к уточнению  значений параметров во втором знаке.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Информация о работе Линейная сеть с зависимыми данными