Файл: Нейронные сети в matlab.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 136

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ТВЕРСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра «Информационные системы»

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

ПО ЛАБОРАТОРНЫМ РАБОТАМ
по дисциплине:

"Интеллектуальные информационные системы"

на тему:

"Нейронные сети в MATLAB 6.1"

Тверь, 2005 г.

Лабораторная работа 1
Каскадная сеть прямой передачи CF в рабочем пространстве MATLAB.
Для создания каскадной сети используется функция newcf.

Синтаксис:

net = newcf(PR,[S1 S2 … SN],{TF1 TF2 … TFN}, btf, blf pf)

Входные аргументы:

PR – массив размера Rx2 минимальных и максимальных значений для R векторов входа;

Si – количество нейронов в слое i;

TFi – функция активации в слоя I, по умолчанию tansig;

btf – обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm;

blf – функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;

pf – критерии качества обучения, по умолчанию mse;
Выходные аргументы:

net – объект класса network object каскадной нейронной сети с прямой передачей и обучением методом обратного распространения.
Пример.

P = [0 1 2 3 4 5 6 7 8 9 10];

T = [0 1 2 3 4 3 2 1 2 3 4];

net = newcf([0 10], [5 1], {'tansig' 'purelin'});

gensim (net);

Создается каскадная нейронная сеть со следующей архитектурой: каскадная двухслойная сеть с прямой передачей сигнала; первый слой – 5 нейронов с функцией активации tansig; второй слой – 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].
Результат представлен на следующем рисунке.

Д
алее обучим сеть в 50 циклов.

Синтаксис:

net.trainParam.epochs = 50;

net = train (net, P, T);

Характеристика точности обучения будет показана в виде графика; установившаяся среднеквадратичная ошибка составляет приблизительно 0,02, что на порядок выше, чем для сети FF.
Выполним моделирование каскадной двухслойной сети, используя обучающую последовательность входа:

Y = sim (net, P);

plot (P, T, P, Y, 'O')

Каскадная сеть прямой передачи использует функции взвешивания dotprod, накопления netsum и заданные пользователем функции активации.

Первый каскад характеризуется матрицей весов входа, другие каскады – матрицами весов выхода предшествующего каскада; все каскады имеют смещения. Выход последнего каскада является выходом сети. Веса и смещения инициализируются с помощью М – функции initnw.


Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae| mse | msersg | sse}.
Задание.
1. Создать в рабочем пространстве MATLAB каскадную сеть с прямой передачей данных и рассмотреть ее структуру.

2. Обеспечить следующее отображение последовательности входа P в последовательности целей T.

P = [0 1 2 3 4 5 6 7 8 9 10];

T = [0 5 0 0 4 1 8 1 3 3 4];

3. Обучить сеть в 70 циклов.


Лабораторная работа 2
Линейный слой LIND в рабочем пространстве MATLAB.
Для создания линейного слоя LIND используется функция newlind.

Синтаксис:

net = newlind(P, T)

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

Функция net = newlind(P, T) формирует нейронную сеть, используя только обучающие последовательности входа P размера RxQ и цели T размера SxQ. Выходом является объект класса network object с архитектурой линейного слоя.
Пример.

P = 0 : 3;

T = [0.0 2.0 4.1 5.9];

net = newlind(P,T);

gensim (net);

Анализ данных показывает, что требуется найти аппроксимирующую кривую, которая близка к зависимости t = 2*p. Применение линейного слоя LIND в данном случае вполне оправдано.

Значения весов и смещений равны:

net.IW{1}, net.b{1}

ans = 1.9800

ans = 0.3000
Соответствующая аппроксимирующая кривая описывается соотношением

yk = 1.9800rk + 0.3000

Выполним моделирование сформированного линейного слоя:

Y = sim(net, P)

Y = 0.0300 2.0100 3.9900 5.9700
В целом функция newlind вычисляет значения W и смещения В для линейного уровня с входом Р и целью Т, решая линейное уравнение в структуре метода наименьших квадратов:

[W b]*[P;ones] = T.
Задание.
1. Сформировать в рабочем пространстве MATLAB линейный слой LIND, использующего метод наименьших квадратов и рассмотреть его структуру.

2. Задать следующие обучающие последовательности:

P = 1 : 4;

T = [9.0 7.4 8.1 0.5];

3. Выполнить моделирование сформированного линейного слоя.

Y = sim(net,P);

4. Построить графики зависимостей.
Лабораторная работа 3


Динамическая нейронная сеть

Сеть прямой передачи с запаздыванием
Для создания динамической нейронной сети применяется функция NEWFFTD. Функция newfftd предназначена для создания многослойных нейронных сетей прямой передачи сигнала с линиями задержки и заданными функциями обучения и настройки, использующими метод обратного распространения ошибки.

Синтаксис:

net = newfftd(PR, ID, [S1 S2 ….. Sn], {TF1 TF2 ….. TFn}, btf, blf, pf)

Входные аргументы:

PR – массив размера Rх2 минимальных и максимальных значений R векторов входа;

ID – вектор параметров линии задержки на входе сети;

Si – количество нейронов в слое i;

TFi – функция активации слоя I, по умолчанию tansig;

btf – обучающая функция, реализующая метод обратного распространения, по умолчанию trainlm;

blf – функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;

pf – критерий качества обучения, по умолчанию mse.

Выходные аргументы:

net – объект класса network object динамической многослойной нейронной сети.

Пример:

net = newfftd([0 1], [0 1], [5 1], {'tansig' 'purelin'})

Архитектура нейронной сети: двухслойная сеть с прямой передачей сигнала и линией задержки [0 1]; первый слой – 5 нейронов с функцией активации tansig; второй слой – 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].

Зададим последовательность входа и целей:

P = {1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 1};

T = {1 -1 0 1 0 -1 1 -1 0 0 0 1 0 -1 0 1};

Обучим сеть в течении 50 циклов и промоделируем, используя в качестве теста обучающую последовательность входа:

net.trainParam.epochs = 50;

net = train(net, P, T);

Y = sim(net, P);

Y = [1] [-1] [0] [1] [0] [-1] [1] [-1] [0] [0] [0] [1] [0] [-1] [0] [1]

Выход сети точно совпадает с целевой последовательностью.

Свойства сети:

Функциями активации могут быть любые дифференцируемые функции, например: tansig, logsig или purelin.

Обучающими функциями могут быть любые функции, реализующие метод обратного распространения: trainlm, trainbfg, trianrp, traingd и др.

Функция trainlm является обучающей функцией по умолчанию, поскольку обеспечивает максимальное быстродействие, но требует значительных ресурсов памяти. Если ресурсы памяти недостаточны, воспользуйтесь следующими методами:

Установите значение свойства net.trainParam.mem_reduc равным 2 или более, что снизит требования к памяти, но замедлит обучение;

Воспользуйтесь обучающей функцией trainbfg , которая работает медленнее, но требует меньше памяти, чем Функция trainlm;

Перейдите к обучающей функции trainrp, которая работает медленнее, но
требует меньшей памяти, чем М-функция trainbfg.

Функциями настройки могут быть функции, реализующие метод обратного распространения: learngd, learngdm.

Критерием качества обучения может выступать любая дифференцируемая функция: mse, msereg.

Алгоритм:

Многослойная динамическая сеть прямой передачи включает Ni слоёв с функциями взвешивания dotprod, функциями накопления netsum и заданными пользователем функциями активации.

Первый слой характеризуется матрицей весов входа, другие слои – матрицами весов входа предшествующего слоя; все слои имеют смещения. Выход последнего слоя является выходом сети. Веса и смещения каждого слоя инициализируются с помощью М-функций initnw.

Режим адаптации реализуется М-функцией adaptwb. Для режима обучения выбирается обучающая функция, использующая метод обратного распространения ошибки.

Оценка качества обучения основана на функциях оценки качества, выбираемых из списка {mae | mse | msereg | sse}.

Задание.

1. Создать в рабочем пространстве MATLAB двухслойную нейронную сеть с прямой передачей сигнала и линией задержки [0 1]; число нейронов на втором слое –1; на первом – варьируется; функции активации – tansig, purelin; диапазон изменения входа [0 10].

2. Задать последовательность входов и целей , содержащих не менее 10 значений.

3. Обучить сеть (не менее 30 циклов) и протестировать с использованием заданной последовательности входа.

Лабораторная работа 4
Линейные сети

Линейный слой
Линейные слои находят применение при решении задач аппроксимации, фильтрации и предсказания сигналов, построении моделей динамических систем в задачах управления. Функция newlin() формирует нейронную сеть в виде линейного слоя.

Синтаксис:

net = newlin(PR, s, id, lr);

net = newlin(PR, s, o, P);

Входные аргументы:

PR – массив размера Rх2 минимальных и максимальных значений для R векторов входа;

s – число нейронов;

id – описание линии задержки на входе сети, по умолчанию [0];

lr- параметр скорости настройки, по умолчанию 0.01.

Выходные аргументы:

net – объект класса network object с архитектурной линейного слоя.

Функция net = newlin(PR, s, o, P), где Р –матрица векторов входа, формирует линейный слой с параметром скорости настройки, гарантирующим максимальную степень устойчивости слоя для данного входа Р.

Пример:

Сформировать линейный слой, который для заданного входа воспроизводит заданный отклик системы.


Архитектура линейного входа: линия задержки типа [0 1 2], 1 нейрон, вектор входа с элементами из диапазона [-1 1], параметр скорости настройки 0.01.

net = newlin([-1 1], 1, [0 1 2], 0.01);

gensim(net)

Сформируем последовательности векторов входа и цели:

P= {0 -1 1 1 0 -1 1 0 0 1};

T = {0 -1 0 2 1 -1 0 1 0 1};

Обучим сеть в течении 100 циклов и промоделируем, используя в качестве теста обучающую последовательность входа:

net.trainParam.epochs = 100;

net = train(net, P, T);

Y = sim(net, P);

Алгоритм:

Линейный слой использует функцию взвешивания dotprod, функцию накопления потенциала netsum и функцию активации purelin. Слой характеризуется матрицей весов и вектором смещений, которые инициализируются М-функцией initzero.

Адаптация и обучение выполняются М-функциями adaptwb и trainwb, которые моделируют веса и смещения, используя М-функцию learnwh, до тех пор пока не будет достигнуто требуемое значение критерия качества обучения в виде средней квадратичной ошибки, вычисляемой М-функцией mse.

Задание.

1. Создать в рабочем пространстве MATLAB линейный слой со следующей архитектурой: линия задержки типа [0 1 2], 1 нейрон, вектор входа с элементами из диапазона [0 1], параметр скорости настройки 0.01.

2. Сформулировать две обучающие последовательности Р1, Т1 и Р2, Т2, содержащих не менее 10 значений.

3. Обучить сеть с использованием:

  • только обучающей последовательности Р1, Т1 (не менее 100 циклов);

  • всего объема обучающих данных, соответствующего объединению векторов входа Р3 = [P1 P2] и векторов целей T3 = [T1 T2].

и выполнить моделирование сети для всех значений входа (для обоих случаев), объединяющих векторы Р1 и Р2 – Y = sim(net, [P1 P2]) (для повторной инициализации сети использовать команду net = init(net)).

  1. Сравнить результаты моделирования, сделать вывод.

Лабораторная работа 5

Персептроны в рабочем пространстве MATLAB

.

Для создания персептрона используется функция newp.

Синтаксис:

net = newp(PR,s,tf,lf)

Входные аргументы.

PR – массив размера Rx2 минимальных и максимальных значений для R векторов входа;

s – число нейронов;

tf – функция активации – hardlim или hardlims, по умолчанию hardlim;

lf – обучающая функция – learnp или learnpn, по умолчанию learnp.
Выходные аргументы.

net – объект класса network object.
Пример.

net = newp([0 1; 0 1], 1);

Создается персептрон с одним нейроном, входной вектор которого имеет 2 элемента, значения которых не выходят за пределы диапазона (0, 1).