Введём переменную значения ошибки
запустим функцию адаптации персептрона в цикле, пока ошибка не
Ø
обратится в 0:
>> while (sse(E))
[net,Y,E]=adapt(net,P,T);
linehandle = plotpc(net.IW{1},net.b{1}); drawnow;
end;
Ø Линию решения, разделяющую на класса точек, см. на рисунке 5 (линии, полученные в процессе обучения, не показаны).
Ø
|
Проверяем работу адаптированной сети на тестовом множестве P1:
>> P1=[0.2 0.4 0.4 0.5 0.7;
2 0.5 3 0.5 0.5]
P1 = 0.2000 0.4000 0.4000 0.5000 0.7000
2.0000 0.5000 3.0000 0.5000 0.5000
>> sim(net,P1)
ans = 0 1 0 1 1
% Сеть справилась с задачей классификации новых данных успешно.
3. Поработайте с функциями ошибки, графическими и др. приведенными в лабораторной работе, но не использованными в контрольном примере функциями самостоятельно.
Әдебиет нег. 8 [8--14], қос. 15 [1-62]
Бақылау сұрақтары
1. Персептрон дегеніміз не? Сызық бойынша бөліп алатын есеп нені білдіреді?
2. Персептронды құруға, адаптациялауға және қолдануға арналған Matlab функцияларын келтіріңіз.
3. Matlab-та нейрожелiнiң жұмыс сапасын қалай бағалауға болады?
4. Matlab-та нейрожелілермен жұмыс істеу үшін қандай графикалық функциялары бар?
Вариант 1 Вариант 2
Вариант 3 Вариант 4
Вариант 5 Вариант 6
Вариант 7 Вариант 8
Вариант 9 Вариант 10
№ 3 Зертханалық жұмыс
Тақырыбы. Көпқабатты нейрон дық желі
3.1 Жұмыс мақсаты: Matlab Neural Networks пакеттегі функциялар көмегімен қөпқабатты нейрондық желіні құруға, оқытуға және пайдалануға үйрену.
3.2 Алгоритм обратного распространения ошибки
Алгоритм обратного распространения используется для обучения многослойных сетей с последовательными связями (см. схему многослойной нейронной сети на рисунке 6)
Алгоритм действует циклически (итеративно), и его циклы пртинято называть эпохами. На каждой эпохе на вход сети поочередно подаются все обучающие наблюдения, затем выходные знчения сети сравниваются с целевыми значениями и вычисляется ошибка. Значение ошибки, а также градиента поверхности ошибок используется для корректировки весов, после чего все действия повторяются.
Начальная конфигурации сети выбирается случайным образом, и процесс обучения прекращается либо когда пройдено определенное количество эпох, либо когда ошибка достигает некоторого определенного уровня малости, либо когда ошибка перестанет уменьшаться.
Рисунок 6 – Многослойная нейронная сеть
Әдiстемелiк ұсыныстар.
3.2 Нейрожелілік әдістің негізінде есепті шешу кезеңдері.
Нақты есептiң шешiмiн алу үшiн нейрожелілік әдістің негізгі кезеңдері келесідей болады:
1. Желiнi (жаттығу ) үйрету үшiн мәлiметтердi әзiрлеу .
2. Желіні жасау.
3. Желіні үйрету.
4. Желіні тестілеу.
5. Желіні модельдеу (Қойылған есептiң шешiмiн алу үшiн құрылған желіні пайдалану.)
Көпқабатты нейрожеліні (НЖ) құру функциялары.
net = newff(PR, [S1 S2…SNI], {TF1 TF2…TFNI}, BTF, BLF, PF) қателерді кері бағытпен тарату әдісі бойынша "классикалық" көпқабатты нейрожелісін құру,
PR– R - кіріс элементтердiң ең төменгi және максимал мәндерiнен тұратын R х 2 матрицасы,
Si – Ni қабаттар үшін i-ші жасырын қабаттын өлшемі,
Tfi – i-ші қабаттағы нейрондарды ақтивациялау үшін функция, үнсіз бойынша 'tansig',
BTF –желіні үйрету функциясы , үнсіз бойынша 'traingd',
BLF – салмақтар мен ауытқуны баптау функциясы, үнсіз бойынша 'learngdm',
PF – қатенiң функциясы, үнсіз бойынша 'mse'.
Нейрожеліні оқыту функциялары
[net, tr] = train(net, P, T) – net.trainFcn және net.trainParamнiң қойылымдарына сәйкес НЖ үйренуін жүзеге асыратын функция. tr – үйрету үрдісі орындалғаны туралы алынатын ақпарат (циклдер саны және оқытудың қателіктері). P – енгізілетін деректер массиві, T –шығарылатын мақсаттық мәндердің массиві.
Қолданушы тiлегi бойынша берілген конфигурациямен НЖ-ні үйрететін алгоритмін орнатуға мүмкiндiк беретін қосалқы функциялар, мысалы:
[net, tr] = traingd(net, …) – қателiктi керi бағытпен тарату алгоритмін орындайтын функция.
[net, tr] = trainbfg(net, …) – қателiктi керi бағытпен тарату квазиньютононның алгоритмін орындайтын оқыту функциясы.
[net, tr] = trainrp(net, …) – қателiктi керi бағытпен тарату серпiмдi алгоритмін iске асыратын функция.
[net, tr] = trainlm(net, …) – Левенберг-Марквардтаның ықшамдау алгоритмін пайдаланып НЖ –нің салмақтарын және ауытқуларын қайтаратын функция.
3.6 Характеристики НС
net.performFcn - определяет функцию ошибки (оценки функционирования сети), например: net.performFcn = 'sse' .
net.trainParam –определяют параметры используемой функции обучения. Например:
net.trainParam.epochs = 20 задает количество циклов обучения, равное 20. По умолчанию net.trainParam.epochs = 100.
net.trainParam.goal = 0.005 задает ошибку сети, при которой обучение будет считаться законченным. По умолчанию net.trainParam.goal = 0.
net.trainFcn – определяет используемую функцию обучения сети, например:
net.trainFcn = 'traincgf'.
3.7 Работа с файлами НС
save 'путь\имя файла' net – запись НС net в файл, расположенный в указанном каталоге. Например:
save 'D:\Ns\nun' net
load 'путь\имя файла' – загрузка НС из указанного файла. Например:
load 'D:\Ns\nun'
path(path, 'Полное наименование каталога') – подключение указанного каталога к Matlab в качестве рабочего. По умолчанию все m-файлы ищутся только в текущем рабочем каталоге.
3.8 Функция оценки качества работы сети
[m, b, r] = postreg(A,T) – функция нахождения уравнения линейной регрессии между выходами НС и соответствующими целевыми значениями. Аргументы: A – массив фактических выходов сети, T – массив целевых векторов, m – коэффициент линейной регрессии, b – смещение, r – коэффициент корреляции (если r = 1, то результат моделирования сети можно считать идеальным).
3.9 Пример решения задачи с помощью многослойной нейронной сети
В качестве примера рассмотрим следующую задачу: имеется массив,
состоящий из значений функции , (S>0) на интервале (0,1).
Требуется создать нейронную сеть, такую, что при вводе этих значений на входы сети, на выходах получались бы значения параметров С, A и S.
3.10 Жұмысты орындау тәртібі
3.10.1. Подготовка данных для обучения (тренировки) сети
Определим размерность входного массива. Выберем количество значений функции равным N = 21, т.е. в качестве входных векторов массива используем значения функции y в точках х = 0.05; …1.0. Для обучения сети необходимо сформировать массив входных векторов для различных наборов параметров С, A и S. Каждый набор этих параметров является целевым вектором для соответствующего входного вектора.
Для подготовки входного и целевого массивов воспользуемся следующим алгоритмом. Выбираем случайным образом значения компонент целевого вектора С, A, S и вычисляем компоненты соответствующего входного вектора. Повторяем эту процедуру М раз и получаем массив входных векторов в виде матрицы NxM и массив целевых векторов в виде матрицы 3хМ.
Прежде чем приступать к формированию обучающих массивов необходимо определиться с некоторыми свойствами массивов.
1. Диапазон изменения параметров С, A, S. Выберем диапазоны изменения параметров C, A, S равными (0.1, 1). Значения, близкие к 0 и сам 0 исключим в связи с тем, что функция не определена при S=0. Второе ограничение связано с тем, что при использовании типичных передаточных функций желательно, чтобы компоненты входных и выходных векторов не выходили за пределы диапазона (-1,1) (обойти это ограничение позволяют методы нормирования данных).
2. Количество входных и эталонных векторов выберем равным М=100. Этого достаточно для обучения, причем сам процесс обучения не займет много времени.
Тестовые массивы и эталоны подготовим с помощью программы mas1. Программа mas1 создается в редакторе Matlab (File – New…–M-file) и записывается на диск для дальнейшего использования.
P = zeros(100,21); % формирование входного массива P
T = zeros(3,100); % и целевого вектора T
x = 0:5.e-2:1;
for i =1:100
c = 0.9*rand+0.1;
a = 0.9*rand+0.1;
s = 0.9*rand+0.1;
T(1,i)=c;
T(2,i)=a;
T(3,i)=s;
P(i,:)=c*exp(-((x-a).^2/s));
end;
P=P';
С помощью этой программы формируется матрица P из M=100 входных вектор-столбцов, каждый из которых сформирован из 21 точки исходной функции со случайно выбранными значениями параметров C,A,S, и целевой матрицы T из 100 эталонных вектор-столбцов, каждый из которых сформирован из 3 соответствующих целевых значений. Матрицы P и T будут использованы при обучении сети.
3.10.2. Создание сети
Выбор архитектуры сети для решения конкретной задачи основывается на опыте разработчика. Предложенная архитектура сети является одним из возможных вариантов.
Для решения задачи сформируем трехслойную сеть, включающую 21 нейрон во входном слое (по числу компонент входного вектора) с функцией активации logsig, 15 нейронов во втором слое с функцией активации logsig и 3 нейрона в выходном слое (по числу компонентов выходного вектора) с функцией активации purelin. При этом в качестве обучающего алгоритма выбран алгоритм Levenberg-Marquardt (trainlm). Этот алгоритм обеспечивает быстрое обучение, но требует много ресурсов. Для обучения можно использовать также и другие алгоритмы (trainbfg, trainrp, trainscg, traincgb, traincgf и т.д.). Указанная сеть формируется с помощью функции:
net= newff( minmax( P), [21, 15, 3], {' logsig' ' logsig' ' purelin'}, ' trainlm');
Результатом выполнения функции newff является объект – нейронная сеть net заданной конфигурации.
3.10.3. Обучение сети
Следующий шаг – обучение созданной сети. Перед обучением необходимо задать параметры обучения. Задаем функцию оценки функционирования sse.
net.performFcn='sse';
В этом случае в качестве оценки (ошибки) вычисляется сумма квадратичных отклонений выходов сети от эталонов. Задаем критерий окончания обучения – значение отклонения, при котором обучение будет считаться законченным:
net.trainParam.goal=0.01;
Задаем максимальное количество циклов обучения. После того, как будет выполнено указанное количество циклов, обучение будет завершено:
net.trainParam.epochs=50;
Теперь можно начинать обучение сети:
[net,tr]=train(net,P,T);
Процесс обучения иллюстрируется графиком зависимости ошибки функционирования от номера цикла обучения (см. рисунок 7).
Рисунок 7 – График изменения ошибки при увеличении эпох обучения
-Обучение сети окончено. Обученную сеть можно сохранить в файле nn1.mat:
save nn1 net;
3.10.4. Тестирование сети . Перед тем, как воспользоваться нейронной сетью, необходимо исследовать степень достоверности результатов вычислений сети на тестовом массиве входных векторов. В качестве тестового массива необходимо использовать массив, компоненты которого отличаются от компонентов массива, использованного для обучения. В нашем случае для получения тестового массива достаточно воспользоваться еще раз программой mas1.
Для оценки достоверности результатов работы сети можно воспользоваться функцией postreg.
>> mas1; % создание нового тестового массива P
>> y = sim(net,P); % обработка тестового массива сетью
>> [m,b,r] = postreg(y(1,:),T(1,:)); % анализ результатов работы сети.
Сравнение компонентов С целевых векторов с соответствующими компонентами выходных векторов сети показано на рисунке 8. Видно, что все точки легли на прямую, что говорит о правильной работе сети на тестовом массиве.
Аналогичные результаты получаем для двух других компонент целевого вектора:
>> [m,b,r] = postreg(y(2,:),T(2,:));
>> [m,b,r] = postreg(y(3,:),T(3,:));
Таким образом, сеть отлично решает поставленную задачу для всех трех выходных параметров. Сохраним обученную сеть net на диске в файл nn1.mat
save nn1 net
3.10.5. Моделирование сети (использование сети для решения задачи)
Чтобы применить обученную сеть для обработки данных, необходимо воспользоваться функцией Y=sim(net,p), где p – набор входных векторов, Y – результат анализа в виде набора выходных векторов. Например, пусть С = 0.2, A = 0.8, S = 0.7, тогда
p=0.2* exp(-(( x-0.8).^2/0.7));
p= p';
Y= sim( net, p)
Получаем:
Y = 0.2048 (C)
0.8150 (A)
0.7048 (S)
Результат весьма близок к правильному (0.2; 0.8; 07). Рисунок 8 – Анализ работы сети
(0, 1) интервалында табылған Y-тың функциялардың мәндері бойынша A және C-тiң параметрлерiнiң мәнiн есептейтін көп қабатты нейрондық желіні құрыңыз және үйретіңіз ( 0 ден 1 дейін диапазонында A және C мәндерінің өзгеруі мүмкін) Жұмыс варианттары
Вариант | 1 | 2 | 3 |
Функция | ![]() | ![]() | ![]() |
4 | 5 | 6 | 7 |
![]() | ![]() | ![]() | ![]() |
8 | 9 | 10 |
![]() | ![]() | ![]() |
Бақылау сұрақтары Нейрожелілік әдістің негізгі кезеңдерін атап өтіңіз Әр кезеңдегі жұмысты түсіндіріңіз.Қателерді кері бағытпен тарату алгоритмін сипаттап беріңіз? Дәуiр дегеніміз не?
1. Қателiктi керi бағытпен тарату әдiсі бойынша нейрожеліні үйрету үшін Matlab-тың қандай функциялары арналған (жасау, үйрену, қолдану, бағалау)?
4 Лабораторная работа № 4