Каскадная сеть прямой передачи CF в рабочем пространстве MATLAB.
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
ПО ЛАБОРАТОРНЫМ РАБОТАМ
по дисциплине:
"Интеллектуальные информационные системы"
на тему:
"Нейронные сети в MATLAB 6.1"
Тверь, 2011 г.
Лабораторная работа 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
Динамическая нейронная сеть
Сеть прямой передачи с запаздыванием
Для создания динамической нейронной сети применяется функция 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 динамической многослойной нейронной сети.
Пример:
Зададим последовательность входа и целей:
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};
Создадим нейронную сеть:
net = newfftd([0 10], [0 1], [5 1], {‘tansig’ ‘purelin’})
Архитектура нейронной сети: двухслойная сеть с прямой передачей сигнала и линией задержки [0 1]; первый слой – 5 нейронов с функцией активации tansig; второй слой – 1 нейрон с функцией активации purelin; диапазон изменения входа [0 10].
Обучим сеть в течении 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 1 1 0 -1 1 0 0 1};
T = {0 -1 0 2 1 -1 0 1 0 1};
Архитектура линейного входа: линия задержки типа [0 1 2], 1 нейрон, вектор входа с элементами из диапазона [-1 1], параметр скорости настройки 0.01.
net = newlin([-1 1], 1, [0 1 2], 0.01);
Gensim(net)
Обучим сеть в течении 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)).
4. Сравнить результаты моделирования, сделать вывод.
Лабораторная работа 5
Лабораторная работа 7
Сети Хопфилда
Для создания модифицированной сети Хопфилда используется функция newhop
Синтаксис:
net=newhop(T)
Входной аргумент:
Массив T размера RхQ, объединяющий Q целевых векторов (со значениями +1 или –1). R- число элементов входного вектора
Выходные аргументы:
net – объект класса network object
Пример:
T = [-1 –1 1; 1 –1 1];
net = newhop(T);
Создается сеть Хопфилда с двумя устойчивыми точками в трехмерном пространстве.
Архитектура сети:
Рекуррентная многослойная сеть, в которой вход и выход линейного слоя совпадают.
В сети используется линейная функция активации с насыщением satlins(),
которая описывается следующим образом:
-1, n<-1
n, -1<=n<=1
1, n>1
Сеть Хопфилда может быть промоделирована с одним или большим количеством векторов, которые задаются как начальные условия. После того как начальные условия заданы сеть генерирует выход, который по обратной связи подается на вход. Этот процесс повторяется много раз, пока на выходе не установится равновесие.
Спроектировать сеть Хопфилда – значит создать рекуррентную сеть со множеством точек равновесия, таких, что при задании начальных условий сеть приходит в состояние покоя в одной из этих точек.
Рассмотрим следующий пример: требуется разработать сеть с двумя устойчивыми точками в вершинах трехмерного куба
T = [-1 –1 1; 1 –1 1];
T = -1 1
T = -1 -1
T = 1 1
Для корректной работе сети необходимо взять обратную матрицу T:
T = T’;
Выполним синтез сети:
net=newhop(T);
gensim(net);
После создания сети можно получить информацию о ее структуре, используя метод layers{}
net.layers{1};
Далее удостоверимся, что разработанная сеть имеет устойчивые состояния в этих двух точках используя функцию sim(net,n,[],AI), аргументами которой будут net – объект типа сеть Хопфилда, n=2- число входных целевых векторов, AI=T-начальное состояние слоя:
АI = T;
Y = sim(net,2,[],AI);
Y
На выходе получим:
Y= -1 1
-1 –1
1 1
Что соответствует точкам равновесия.
Если теперь мы зададим другой начальный массив точек, например
AI={[-0.9,-0.8,-0.7]};
и вызовем функцию sim
Y = sim(net,{1 5},{},AI);
то получим выходной вектор Y= [-1,-1, 1][1]:
Y =
-1 -1 -1 -1 -1
-1 -1 -1 -1 -1
1 1 1 1 1
т.е. сеть из заданного начального состояния вернулась в положение равновесия. Следует обратить внимание, что при втором вызове функции sim в качестве входного параметра указывается такт дискретности (1) и количество шагов моделирования (5).
Задание.
- Создать в рабочем пространстве MATLAB сеть Хопфилда с четырмя нейронами (входной массив из четырех векторов) и получить о ней информацию используя метод net.layers();
- Исследовать поведение сети, задавая начальные условия случайным образом с помощью функции rands(). Вывести результаты на экран функцией plot().
Лабораторная работа 8
Радиальные нейронные сети
(Radial Basis Function Neural Networks – RBF NN)
Основным применением нейронных сетей с радиальной функцией (RBF-сетей) является аппроксимация функций. Такие сети имеют два слоя:
1) скрытый слой нейронов с радиально-симметричной функцией. Это специальный класс функций, характерное свойство которых заключается в том, что отклик функции монотонно убывает с удалением от центральной точки. Типичный пример такой функции – функция Гаусса, имеющая следующее аналитическое представление:
График данной функции изображен ниже:
Радиальная функция имеет максимум, равный 1, когда аргумент функции (n) равен нулю. В слое с радиально-симметричной функцией вычисляется расстояние между вектором весов (w) и входным вектором (p). Размерность обоих векторов равна количеству входов рассматриваемого слоя – R. Затем величина расстояния (между w и p) умножается на параметр b (который позволяет задать чувствительность радиального нейрона). Полученное значение и есть аргумент радиальной функции.
Как только расстояние между w и p уменьшается, происходит увеличение значения радиальной функции. Таким образом, радиальный нейрон производит единицу каждый раз, когда вход p идентичен вектору весов w.
Для вычисления радиальной функции используется функция radbas.
Синтаксис:
A = radbas(N)
Входные аргументы:
N – вектор расстояний размера Sx1 для каждого нейрона S.
Выходные аргументы:
A – вектор значений радиальной функции для каждого нейрона S.
Пример:
n = -5:0.1:5;
a = radbas(n);
plot(n,a)
В результате создается график радиальной функции:
2) выходной линейный слой. Данный слой содержит нейроны с линейными функциями. Значение такой функции равно значению ее аргумента. Также каждый нейрон имеет параметр b, который определяет чувствительность нейрона к входным данным.
Т.о., RBF-сеть, состоящая из S1 нейронов в первом слое и S2 нейронов во втором слое, схематично представлена на рисунке ниже:
Для создания радиальной нейронной сети используется функция newrb, которая добавляет нейроны в скрытый радиальный слой до тех пор, пока нейронная сеть не удовлетворяет заданному значению ошибки.
Синтаксис:
net = newrb(P,T,GOAL,SPREAD,MN,DF)
Входные аргументы:
P – массив размера RxQ входных векторов, где R – количество входов, Q – количество входных векторов;
T – массив размера SxQ целевых векторов, где R – количество выходов, Q – количество целевых векторов;
GOAL – целевая среднеквадратичная ошибка, по умолчанию равна 0;
SPREAD – константа радиальной функции, по умолчанию равна 1;
MN – максимальное число нейронов, по умолчанию равно Q;
DF – количество нейронов, которые необходимо добавлять после каждого вывода ошибки, по умолчанию равно 25.
Выходные аргументы:
net – объект класса network object.
Пример:
Установим входные значения P и связанных с ними выходных значений T (количество значений – 21), а также построим график для этих значений с использованием функций plot, xlabel, ylabel:
P = -1 : 0.1 : 1;
T = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 ...
.1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 ...
.3072 .3960 .3449 .1816 -.0312 -.2189 -.3201];
plot(P,T,'+');
xlabel('Входной вектор P');
ylabel('Целевой вектор T');
Для того чтобы найти функцию, проходящую через эти точки, используем следующую команду:
net = newrb(P, T, 0.02, 1);
В результате создается двухслойная радиальная нейронная сеть, которая аппроксимирует данные, заданные векторами P и T. Для сети установлена среднеквадратичная ошибка, равная 0.02, а также параметр spread, равный единице.
В процессе обучения автоматически составляется график ошибки сети в зависимости от номера эпохи. Чтобы увидеть, насколько точно RBF-сеть аппроксимирует данные, необходимо протестировать сеть и вывести график выходных откликов сети:
plot(P,T,'+');
xlabel('Input');
X = -1:.01:1;
Y = sim(net,X);
hold on;
plot(X,Y);
hold off;
legend({'Target','Output'})
Задание.
1. Задать последовательности входов и целей. Например:
P = [1 2 3 4 5 6 7 8 9 10 11 12];
T = [2 4.1 5.9 3.6 1.7 7.3 6.1 9.2 3.8 1.2 4.9 6.3];
2. Создать радиальную нейронную сеть на основе заданных векторов со среднеквадратической ошибкой, равной 0.01. Также установить параметр spread равным единице.
3. Построить графики сигналов выхода сети и целевых значений:
plot(P,T,'+');
X = 1:.01:12;
Y = sim(net,X);
hold on;
plot(X,Y);
hold off;
4. Промоделировать обученную сеть при различных значениях параметра spread (например, при 0.3, 0.9, 2, 10, 50 и 100) и построить графики при каждом значении, чтобы сделать вывод о влиянии значения данного параметра на способность RBF-сети выполнять аппроксимацию функций.
Лабораторная работа 9
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
ПО ЛАБОРАТОРНЫМ РАБОТАМ
по дисциплине:
"Интеллектуальные информационные системы"
на тему:
"Нейронные сети в MATLAB 6.1"
Тверь, 2011 г.
Лабораторная работа 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