MyKod Информатика Лекции Нейронные сети. Часть 11. Лекции

Авторизация







Нейронные сети. Часть 11. Лекции
22.09.2009 11:11

Нейронные сети. Часть 11

Алгоритмы метода сопряженных градиентов

C356. TRAINCGFЗаданы следующие обучающие последовательности входов P и целей T:

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

Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig,  а во втором - 1 нейрон с функцией активации logsig. Для обучения сети применим функцию traincgf.

Формирование сети:

net = newff([0 5],[2 1],{'tansig','logsig'},'traincgf');  

Обучение сети:

net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.001;[net,TR] = train(net,P,T); grid on   TRAINCGF-srchcha, Epoch 0/50, MSE 0.165524/0.001, Gradient 0.293981/1e-006TRAINCGF-srchcha, Epoch 6/50, MSE 0.000964101/0.001, Gradient 0.00271925/1e-006TRAINCGF, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)   Y =  Columns 1 through 4     0.0077    0.0121    0.0524    0.9579  Columns 5 through 6

    0.9760    0.9780  

C358. TRAINCGPЗаданы следующие обучающие последовательности входов P и целей T:

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

Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig,  а во втором - 1 нейрон с функцией активации logsig. Для обучения сети применим функцию traincgp.

Формирование сети:

net = newff([0 5],[2 1],{'tansig','logsig'},'traincgp');  

Обучение сети:

net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.001;[net,TR] = train(net,P,T);  grid on   TRAINCGP-srchcha, Epoch 0/50, MSE 0.394041/0.001, Gradient 0.721591/1e-006TRAINCGP-srchcha, Epoch 4/50, MSE 0.00026955/0.001, Gradient 0.00334169/1e-006TRAINCGP, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)   Y =  Columns 1 through 4     0.0062    0.0051    0.0374    0.9912  Columns 5 through 6

    0.9938    0.9938  

C361. TRAINCGBЗаданы следующие обучающие последовательности входов P и целей T:

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

Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig,  а во втором - 1 нейрон с функцией активации logsig. Для обучения сети применим функцию traincgb.

Формирование сети:

net = newff([0 5],[2 1],{'tansig','logsig'},'traincgb');  

Обучение сети:

net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.001;[net,TR] = train(net,P,T);  grid on   TRAINCGB-srchcha, Epoch 0/50, MSE 0.42501/0.001, Gradient 0.558356/1e-006TRAINCGB-srchcha, Epoch 4/50, MSE 0.00025582/0.001, Gradient 0.00131645/1e-006TRAINCGB, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)  Y =  Columns 1 through 4     0.0151    0.0150    0.0323    0.9950  Columns 5 through 6

    0.9977    0.9977  

C363. TRAINSCGЗаданы следующие обучающие последовательности входов P и целей T:

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

Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig, а во втором - 1 нейрон с функцией активации logsig. Для обучения сети применим функцию trainscg.

Формирование сети:

net = newff([0 5],[2 1],{'tansig','logsig'},'trainscg');  

Обучение сети:

net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.001;[net,TR] = train(net,P,T); grid on   TRAINSCG, Epoch 0/50, MSE 0.184004/0.001, Gradient 0.345587/1e-006TRAINSCG, Epoch 10/50, MSE 0.00179225/0.001, Gradient 0.00384079/1e-006TRAINSCG, Epoch 12/50, MSE 0.000755243/0.001, Gradient 0.00273395/1e-006TRAINSCG, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)   Y =  Columns 1 through 4     0.0077    0.0129    0.0381    0.9526  Columns 5 through 6

    0.9820    0.9830  

Квазиньютоновы алгоритмы обучения

C365. TRAINBFGЗаданы следующие обучающие последовательности входов P и целей T:

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

Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig,  а во втором - 1 нейрон с функцией активации logsig. Для обучения сети применим функцию trainbfg.

Формирование сети:

net = newff([0 5],[2 1],{'tansig','logsig'},'trainbfg');  

Обучение сети:

net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.0001;[net,TR] = train(net,P,T); grid on   TRAINBFG-srchbac, Epoch 0/50, MSE 0.475987/0.0001, Gradient 0.339126/1e-006TRAINBFG-srchbac, Epoch 10/50, MSE 0.00426485/0.0001, Gradient 0.0770971/1e-006TRAINBFG-srchbac, Epoch 13/50, MSE 5.71314e-006/0.0001, Gradient 0.000107212/1e-006TRAINBFG, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)   Y =  Columns 1 through 4     0.0000    0.0000    0.0006    0.9944  Columns 5 through 6

    0.9989    0.9990  

C368. TRAINOSSЗаданы следующие обучающие последовательности входов P и целей T:

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

Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig,  а во втором - 1 нейрон с функцией активации logsig. Для обучения сети применим функцию trainoss.

Формирование сети:

net = newff([0 5],[2 1],{'tansig','logsig'},'trainoss');  

Обучение сети:

net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.0001;[net,TR] = train(net,P,T); grid on   TRAINOSS-srchbac, Epoch 0/50, MSE 0.468812/0.0001, Gradient 0.199095/1e-006TRAINOSS-srchbac, Epoch 10/50, MSE 0.0080093/0.0001, Gradient 0.116508/1e-006TRAINOSS-srchbac, Epoch 20/50, MSE 0.00339965/0.0001, Gradient 0.0136916/1e-006TRAINOSS-srchbac, Epoch 26/50, MSE 4.15302e-005/0.0001, Gradient 0.000220306/1e-006TRAINOSS, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)   Y =  Columns 1 through 4     0.0002    0.0002    0.0031    0.9875  Columns 5 through 6

    0.9935    0.9936  

C370. TRAIMLMЗаданы следующие обучающие последовательности входов P и целей T:

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

Поскольку соответствие между входом и целью носит явно выраженный нелинейный характер, то будем использовать нейронную сеть с нелинейными сигмоидальными функциями активации. Выберем двухслойную нейронную сеть с прямой передачей сигнала; в первом слое используем 2 нейрона с функцией активации tansig,  а во втором - 1 нейрон с функцией активации logsig. Для обучения сети применим функцию trainlm.

Формирование сети:

net = newff([0 5],[2 1],{'tansig','logsig'},'trainlm');  

Обучение сети:

net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.0001;[net,TR] = train(net,P,T); grid on   TRAINLM, Epoch 0/50, MSE 0.463676/0.0001, Gradient 1.60204/1e-010TRAINLM, Epoch 10/50, MSE 0.000125314/0.0001, Gradient 0.00115041/1e-010TRAINLM, Epoch 11/50, MSE 1.68681e-005/0.0001, Gradient 0.000171152/1e-010

TRAINLM, Performance goal met.  

Данный алгоритм имеет адаптивный параметр mu, изменение которого построено в виде графика:

figure(2), clf, plot(TR.mu, 'LineWidth',2), grid ontitle('Параметр адаптации')xlabel('Число циклов') 

Выполним моделирование сети:

Y = sim(net,P)  

 Y =  Columns 1 through 4     0.0006    0.0006    0.0049    0.9924  Columns 5 through 6

    0.9970    0.9970  

С373. TRAINBR

Рассмотрим задачу аппроксимации синусоидальной функции, которая зашумлена нормально распределенным шумом:

P = [-1:.05:1]; T = sin(2*pi*P) + 0.1*randn(size(P));  

Сформируем для решения этой задачи двухслойную нейронную сеть прямой передачи сигнала. Вход сети принимает значения в диапазоне от –1 до 1. Первый слой имеет 20 нейронов с функцией активации tansig, второй слой имеет один нейрон с функцией активации purelin . В качестве обучающей  используем функцию trainbr.

Формирование сети

net = newff([-1 1],[20,1],{'tansig','purelin'},'trainbr');  

Обучение сети:

net.trainParam.epochs = 50; net.trainParam.show = 10;net = train(net,P,T);  grid on   TRAINBR, Epoch 0/50, SSE 35.495/0, SSW 21461.6, Grad 6.54e+001/1.00e-010, #Par 6.10e+001/61TRAINBR, Epoch 10/50, SSE 0.165045/0, SSW 3033.99, Grad 2.17e-001/1.00e-010, #Par 2.94e+001/61TRAINBR, Epoch 20/50, SSE 0.186866/0, SSW 1579.57, Grad 3.73e-001/1.00e-010, #Par 2.56e+001/61TRAINBR, Epoch 30/50, SSE 0.202243/0, SSW 988.328, Grad 1.13e-001/1.00e-010, #Par 2.24e+001/61TRAINBR, Epoch 40/50, SSE 0.215021/0, SSW 677.114, Grad 4.84e-002/1.00e-010, #Par 1.99e+001/61TRAINBR, Epoch 50/50, SSE 0.226781/0, SSW 389.632, Grad 1.32e-001/1.00e-010, #Par 1.64e+001/61

TRAINBR, Maximum epoch reached.  


Выполним моделирование сети и построим графики исследуемых функций

Y = sim(net,P); figure(2), clf, h1=plot(P,Y,'LineWidth',2);hold on, set(h1,'Color',[1/2,1/2,0])plot(P,T,'+r','MarkerSize',6,'LineWidth',2), grid on

legend('выход', 'вход')  

Функции оценки качества обучения

С377. SSE

Получим информацию о данной функции и ее производной:

sse('name'), sse('deriv'),  sse('pnames')   ans =Sum squared errorans =dsseans =

     {}  

Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [–10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin :

net = newff([-10 10],[4 1],{'tansig','purelin'});  

Зададим векторы входа и целей

P = [-10 -5 0 5 10]; T = [ 0 0 1 1 1];  

Промоделируем исходную нейронную сеть и вычислим ее ошибку

Y = sim(net, P); E = T-Y  E =  Columns 1 through 4    -1.5958   -1.1879    1.3390    1.7340  Column 5     2.6642  Вычислим функционал качества ssenet.performFcn = 'sse'; perf = sse(E)   perf =

   15.8554  

Теперь вычислим градиенты функционала качества.

Градиент функционала по вектору ошибки вычисляется следующим образом

dPerf_dE = dsse('e',E)   dPerf_dE =  Columns 1 through 4    -3.1916   -2.3757    2.6779    3.4681  Column 5

    5.3284  

Для вычислений градиента функционала по вектору настраиваемых параметров сформируем этот вектор, который объединяет веса и смещения сети

X = [net.IW{1}; net.b{1}]'  

 X =  Columns 1 through 4     0.5600   -0.5600    0.5600    0.5600  Columns 5 through 8

   -5.6000    1.8667    1.8667    5.6000  

Градиент функционала по вектору параметров

dPerf_dX = dsse('x',E,X)  

dPerf_dX =  Columns 1 through 7      0     0     0     0     0     0     0  Column 8

     0  

Этот градиент равен нулевому вектору, поскольку функционал качества не зависит явным образом от параметров сети.

C378. MSE

Получим информацию о данной функции и ее производной:

mse('name'), mse('deriv'), mse('pnames')   ans =Mean squared errorans =dmseans =

     {}  

Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [–10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin :

net = newff([-10 10],[4 1],{'tansig','purelin'});  

Зададим векторы входа и целей

P = [-10 -5 0 5 10]; T = [ 0 0 1 1 1];  

Промоделируем исходную нейронную сеть и вычислим ее ошибку

Y = sim(net, P); E = T-Y   E =  Columns 1 through 4     0.8520    0.8881    2.1218    3.0940  Column 5     2.2752  Вычислим функционал качества msenet.performFcn = 'mse'; perf = mse(E)  perf =

    4.1533  

Теперь вычислим градиенты функционала качества.

Для вычисления градиентов сформируем вектор настраиваемых параметров (веса и смещения):

X = [net.IW{1}; net.b{1}]'  

Градиент функционала по вектору ошибки вычисляется следующим образом

dPerf_dE = dmse('e',E,X,perf)  dPerf_dE =  Columns 1 through 4     0.3408    0.3553    0.8487    1.2376  Column 5

    0.9101  

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

dPerf_dX = dmse('x',E,X)  dPerf_dX =  Columns 1 through 7      0     0     0     0     0     0     0  Column 8

     0  

Этот градиент равен нулевому вектору, поскольку функционал качества не зависит явным образом от параметров сети.

С379. MSEREG

Получим информацию о данной функции и ее производной

msereg('name'), msereg('deriv'), msereg('pnames'), msereg('pdefaults')  ans =Mean squared error with regularizationans =dmseregans =     'ratio'ans =

    ratio: 0.9000  

Это единственный функционал качества, который состоит из двух слагаемых: среднеквадратической ошибки с весом ratio и штрафной функции, оцениваемой суммой квадратов весов и смещений с весом 1-ratio.

Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [–10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin:

net = newff([-10 10],[4 1],{'tansig','purelin'});   

Зададим векторы входа и целей

P = [-10 -5 0 5 10]; T = [ 0 0 1 1 1];  

Промоделируем исходную нейронную сеть и вычислим ее ошибку

Y = sim(net, P); E = T-Y  E =  Columns 1 through 4    -1.9956   -1.7524    0.0534    0.9007  Column 5     1.2061  Вычислим функционал качества mseregnet.performFcn = 'msereg'; net.performParam.ratio = 0.9;perf = msereg(E,net)   perf =

    2.2333  

Теперь вычислим градиенты функционала качества.

Для вычисления градиентов сформируем вектор настраиваемых параметров (веса и смещения):

X = [net.IW{1}; net.b{1}]'   X =  Columns 1 through 4     0.5600   -0.5600    0.5600    0.5600  Columns 5 through 8

   -5.6000    1.8667    1.8667    5.6000  

Градиент функционала по вектору ошибки вычисляется следующим образом

dPerf_dX = dmsereg('e',E,X,perf,net.performParam)  dPerf_dX =  Columns 1 through 4    -0.7184   -0.6309    0.0192    0.3243  Column 5     0.4342  Градиент функционала по вектору параметровdPerf_dX = dmsereg('x',E,X,perf,net.performParam)   dPerf_dX =  Columns 1 through 4    -0.0140    0.0140   -0.0140   -0.0140  Columns 5 through 8

    0.1400   -0.0467   -0.0467   -0.1400  

Этот градиент не равен нулевому вектору, поскольку функционал качества зависит явным образом от параметров сети.

C381. MAE

Получим информацию о данной функции и ее производной

mae('name'), mae('deriv'), mae('pnames')   ans =Mean absolute errorans =dmaeans =

     {}  

Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [–10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin:

net = newff([-10 10],[4 1],{'tansig','purelin'});  

Зададим векторы входа и целей

P = [-10 -5 0 5 10]; T = [ 0 0 1 1 1];  

Промоделируем исходную нейронную сеть и вычислим ее ошибку

Y = sim(net, P); E = T-Y   E =  Columns 1 through 4     0.3265    0.0113    0.6208   -0.3710  Column 5     0.1998  Вычислим функционал качества maenet.performFcn = 'mae'; perf = mae(E)   perf =

    0.3059  

Теперь вычислим градиенты функционала качества.

Для вычисления градиентов сформируем вектор настраиваемых параметров (веса и смещения):

X = [net.IW{1}; net.b{1}]'  X =  Columns 1 through 4     0.5600   -0.5600    0.5600    0.5600  Columns 5 through 8

   -5.6000    1.8667    1.8667    5.6000  

Градиент функционала по вектору ошибки вычисляется следующим образом

dPerf_dE = dmae('e',{E},X); [dPerf_dE{:}]  ans =

     1     1     1    -1     1  

Градиент функционала по вектору параметров

dPerf_dX = dmae('x',{E},{X})  

dPerf_dX =

     0  

Функции настройки параметров

С383. LEARNP

Определим сеть со случайными векторами входа p и ошибки e:

p = rand(2,1); e = rand(3,1);  

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

dW = learnp([],p,[],[],[],[],e,[],[],[],[],[])  dW =    0.0252    0.0198    0.0156    0.0123

    0.1798    0.1412  

С384. LEARNPN

Определим сеть со случайными векторами входа p и ошибки e:

p = rand(2,1); e = rand(3,1);  

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

dW = learnpn([],p,[],[],[],[],e,[],[],[],[],[])   dW =    0.4122    0.1003    0.3301    0.0803

    0.6055    0.1473  

С385. LEARNWH

Определим сеть со случайными векторами входа p и ошибки e с 2-элементным входом и тремя нейронами и параметром скорости настройки lr:

p = rand(2,1); e = rand(3,1); lp.lr = 0.5;  

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

dW = learnwh([],p,[],[],[],[],e,[],[],[],lp,[])   dW =    0.0071    0.0042    0.3130    0.1875

    0.1695    0.1015  

C387. LEARNGD

Допустим, что на некотором шаге настройки слоя с 3 нейронами и двухэлементным входом известен случайный вектор градиента gW, а параметр скорости настройки задан равным 0.5:

gW = rand(3,2); lp.lr = 0.5;  

Тогда вызов функции learngd можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции:

dW = learngd([],[],[],[],[],[],[],gW,[],[],lp,[])   dW =    0.3077    0.3691    0.3960    0.0881

    0.4609    0.2029  

C388. LEARNGDM

Допустим, что на некотором шаге настройки слоя с 3 нейронами и двухэлементным входом известен случайный вектор градиента gW, а параметры скорости настройки и возмущения заданы равными 0.6 и 0.8, соответственно:

gW = rand(3,2); lp.lr = 0.6; lp.mc = 0.8;  

Тогда вызов функции  learngdm можно организовать следующим образом, поскольку не все входные аргументы требуются для вызова этой функции:

ls = []; [dW,ls] = learngdm([],[],[],[],[],[],[],gW,[],[],lp,ls)  dW =    0.5613    0.5362    0.5501    0.0347    0.2462    0.2117ls =     dw: [3x2 double]  

ls.dw  

ans =    0.5613    0.5362    0.5501    0.0347

    0.2462    0.2117  

C389. LEARNLV1

Определим слой нейронной сети с двухэлементным входом и тремя нейронами сеть со случайными массивами входа p, весов w и выхода a; зададим также градиент функционала по выходу gA и параметр скорости настройки lr:

p = rand(2,1); w = rand(3,2);a = compet(negdist(w,p));

gA = [-1;1;1]; lp.lr = 0.5;  

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

dW = learnlv1(w,p,[],[],a,[],[],[],gA,[],lp,[])  dW =         0         0         0         0

   -0.3072    0.0945  

C391. LEARNLV2

Определим слой нейронной сети с двухэлементным входом и тремя нейронами сеть со случайными массивами входа p, весов w и выхода a; зададим также градиент функционала по выходу gA и параметр скорости настройки lr:

p = rand(2,1); w = rand(3,2);n = negdist(w,p); a = compet(n);gA = [-1;1;1]; lp.lr = 0.5; lp.window = 0.25;  

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

dW = learnlv2(w,p,[],n,a,[],[],[],gA,[],lp,[])   dW =   -0.2149    0.1641         0         0

    0.2254   -0.1108  

C392. LEARNK

Определим слой Кохонена сети с двухэлементным входом и тремя нейронами со случайными массивами входа p, весов w и выхода a; зададим также параметр скорости настройки lr:

p = rand(2,1); a = rand(3,1); w = rand(3,2);

lp.lr = 0.5;  

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

dW = learnk(w,p,[],[],a,[],[],[],[],[],lp,[])   dW =   -0.0884   -0.0187   -0.3146    0.1216

   -0.1501    0.1838  

C394. LEARNCON

Определим слой Кохонена сети с двухэлементным входом и тремя нейронами со случайными массивами выхода a, вектора смещений b; зададим также параметр скорости настройки lr:

a = rand(3,1); b = rand(3,1);lp.lr = 0.5;  

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

db = learncon(b,[],[],[],a,[],[],[],[],[],lp,[])   db =    0.2902    0.5015

    0.1399  

C395. LEARNIS

Определим слой Кохонена с двухэлементным входом и тремя нейронами со случайными массивами входа p, весов w и выхода a; зададим также параметр скорости настройки lr:

p = rand(2,1); a = rand(3,1); w = rand(3,2);

lp.lr = 0.5;  

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

dW = learnis(w,p,[],[],a,[],[],[],[],[],lp,[])   dW =    0.0866   -0.1146   -0.0862   -0.1876

   -0.0367   -0.0836  

C396. LEARNOS

Определим слой Кохонена с двухэлементным входом и тремя нейронами со случайными массивами входа p, весов w и выхода a; зададим также параметр скорости настройки lr:

p = rand(2,1); a = rand(3,1); w = rand(3,2);

lp.lr = 0.5;  

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

dW = learnos(w,p,[],[],a,[],[],[],[],[],lp,[])  dW =    0.0055   -0.0042   -0.0521   -0.0244

    0.0272    0.0262  

C397. LEARNSOM

Определим карту Кохонена с расположением нейронов на гексагональной сетке размера 2´3, а также расстояния между ними; зададим случайные массивы входа p, выхода a и весов w, а также параметры процедуры настройки.

p = rand(2,1); a = rand(6,1); w = rand(6,2);pos = hextop(2,3); d = linkdist(pos);lp.order_lr = 0.9; lp.order_steps = 1000;lp.tune_lr = 0.02; lp.tune_nd = 1;   

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

ls = []; [dW,ls] = learnsom(w,p,[],[],a,[],[],[],[],d,lp,ls)   dW =   -1.0999    1.4042    0.3702   -0.4255    0.4251    1.0936   -0.8669    0.7965   -0.6354    0.0720    0.5719    0.7607ls =       step: 1    nd_max: 2  C399. LEARNH

Определим нейронную сеть с двухэлементным входом и тремя нейронами со случайными массивами входа p и выхода a; зададим также параметр скорости настройки lr:

p = rand(2,1); a = rand(3,1);lp.lr = 0.5;  

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

dW = learnh([],p,[],[],a,[],[],[],[],[],lp,[]) dW =    0.2319    0.0320    0.1367    0.0189

    0.0994    0.0137  

C400. MAXLINLR

Зададим числовой массив входа, состоящий из четырех двухэлементных векторов и вычислим максимальные значения параметра скорости настройки для линейной сети без и со смещением:

P = [ 1 2 -4 7; 0.1 3 10 6];lr = maxlinlr(P) %Без смещения lr = 0.0069

lr = maxlinlr(P,'bias') %Со смещением  

lr =    0.0069lr =    0.0069lr =

    0.0067  

С401. LEARNHD

Определим сеть со случайными входом P, выходом A и весами W для слоя с 2-элементным входом и тремя нейронами; зададим также параметры скорости настройки lr и затухание dr.

p = rand(2,1); a = rand(3,1); w = rand(3,2);

lp.lr = 0.5; lp.dr = 0.05;  

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

dW = learnhd(w,p,[],[],a,[],[],[],[],[],lp,[])   dW =    0.0736    0.0618    0.0317    0.0187

    0.1174    0.0576  

Функции одномерного поиска

С404. SRCHGOL

Заданы векторы входа p и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям:

p = [0 1 2 3 4 5]; t = [0 0 0 1 1 1];  

Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig, второй – 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srchgol.

net = newff([0 10],[2 1],{'tansig','logsig'},'traincgf');net.trainParam.searchFcn = 'srchgol';net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.0001;net = train(net,p,t); grid ona = sim(net,p)  TRAINCGF-srchgol, Epoch 0/50, MSE 0.486862/0.0001, Gradient 0.0813759/1e-006TRAINCGF-srchgol, Epoch 9/50, MSE 1.90795e-010/0.0001, Gradient 1.77906e-008/1e-006TRAINCGF, Performance goal met. a =  Columns 1 through 4     0.0000    0.0000    0.0000    1.0000  Columns 5 through 6     1.0000    1.0000  С405. SRCHBRE

Заданы векторы входа p и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям:

p = [0 1 2 3 4 5]; t = [0 0 0 1 1 1];  

Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig,  второй – 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srchbre.

net = newff([0 10],[2 1],{'tansig','logsig'},'traincgf');net.trainParam.searchFcn = 'srchbre';net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.0001;net = train(net,p,t); grid ona = sim(net,p)   TRAINCGF-srchbre, Epoch 0/50, MSE 0.464364/0.0001, Gradient 0.0566042/1e-006TRAINCGF-srchbre, Epoch 10/50, MSE 0.000607763/0.0001, Gradient 0.00140522/1e-006TRAINCGF-srchbre, Epoch 15/50, MSE 7.54063e-005/0.0001, Gradient 0.000251973/1e-006TRAINCGF, Performance goal met. a =  Columns 1 through 4     0.0023    0.0027    0.0156    0.9861  Columns 5 through 6     0.9986    0.9989  С406. SRCHHYB

Заданы векторы входа p и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям:

p = [0 1 2 3 4 5]; t = [0 0 0 1 1 1];  

Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig,  второй – 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srchhyb.

net = newff([0 10],[2 1],{'tansig','logsig'},'traincgf');net.trainParam.searchFcn = 'srchhyb';net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.0001;net = train(net,p,t); grid ona = sim(net,p)   TRAINCGF-srchhyb, Epoch 0/50, MSE 0.297493/0.0001, Gradient 0.211072/1e-006TRAINCGF-srchhyb, Epoch 7/50, MSE 6.47144e-016/0.0001, Gradient 3.86955e-014/1e-006TRAINCGF, Performance goal met. a =  Columns 1 through 4     0.0000    0.0000    0.0000    1.0000  Columns 5 through 6     1.0000    1.0000  С408. SRCHCHA

Заданы векторы входа p и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям:

p = [0 1 2 3 4 5]; t = [0 0 0 1 1 1];  

Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig, второй – 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srchcha.

net = newff([0 10],[2 1],{'tansig','logsig'},'traincgf');net.trainParam.searchFcn = 'srchcha';net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.0001;net = train(net,p,t); grid ona = sim(net,p)   TRAINCGF-srchcha, Epoch 0/50, MSE 0.466016/0.0001, Gradient 0.054143/1e-006TRAINCGF-srchcha, Epoch 9/50, MSE 8.2629e-005/0.0001, Gradient 0.000961218/1e-006TRAINCGF, Performance goal met. a =  Columns 1 through 4     0.0084    0.0090    0.0185    0.9996  Columns 5 through 6     1.0000    1.0000  С409. SRCHBAC

Заданы векторы входа p и целей t, требуется сформировать нейронную сеть, выходы которой близки к заданным целям:

p = [0 1 2 3 4 5]; t = [0 0 0 1 1 1];  

Выберем архитектуру двухслойной сети с прямой передачей сигнала; зададим диапазон входов от 0 до 10, первый слой имеет 2 нейрона с функцией активации tansig, второй – 1 нейрон с функцией активации logsig. Используем функции обучения traincgf и поиска одномерного экстремума srchbac.

net = newff([0 10],[2 1],{'tansig','logsig'},'traincgf');net.trainParam.searchFcn = 'srchbac';net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.0001;net = train(net,p,t); grid ona = sim(net,p)   TRAINCGF-srchbac, Epoch 0/50, MSE 0.427245/0.0001, Gradient 0.147317/1e-006TRAINCGF-srchbac, Epoch 9/50, MSE 7.04485e-005/0.0001, Gradient 0.00175321/1e-006TRAINCGF, Performance goal met. a =  Columns 1 through 4     0.0049    0.0049    0.0052    0.9813  Columns 5 through 6

    0.9993    0.9993  

Масштабирование и восстановление данных

С410. PREMNMX

Следующие операторы выполняют нормировку данных так, чтобы значения входа и цели попадали в интервал [-1,1]:

p = [-10 -7.5 -5 -2.5 0 2.5 5 7.5 10];t = [0 7.07 -10 -7.07 0 7.07 10 7.07 0];[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t)   pn =  Columns 1 through 4    -1.0000   -0.7500   -0.5000   -0.2500  Columns 5 through 8          0    0.2500    0.5000    0.7500  Column 9     1.0000minp =   -10maxp =    10tn =  Columns 1 through 4          0    0.7070   -1.0000   -0.7070  Columns 5 through 8          0    0.7070    1.0000    0.7070  Column 9          0mint =   -10maxt =

    10  

C411. PRESTD

Задана следующая обучающая последовательность векторов входа и целей. Требуется выполнить ее приведение к нормальному закону распределения с параметрами [0 1]

p = [-0.92 0.73 -0.47  0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93];t = [-0.08 3.4 -0.82 0.69 3.1];[pn,meanp,stdp,tn,meant,stdt] = prestd(p,t)   pn =  Columns 1 through 4    -1.3389    0.8836   -0.7328    0.8971   -0.2439    1.0022   -1.0261   -0.8272  Column 5     0.2910    1.0950meanp =    0.0740    0.1040stdp =    0.7424    0.7543tn =  Columns 1 through 4    -0.7049    1.1285   -1.0947   -0.2992  Column 5     0.9704meant =    1.2580stdt =

    1.8982  

C412. PREPCA

Зададим массив двухэлементных векторов входа и выполним их факторный анализ, удерживая только те компоненты вектора, дисперсия которых превышает 2% общей дисперсии. Сначала с помощью функции prestd приведем входные данные к нормальному закону распределения, а затем применим функцию prepca.

P = [-1.5 -0.58 0.21 -0.96 -0.79;  -2.2 -0.87 0.31 -1.4 -1.2];[pn,meanp,stdp] = prestd(P)   pn =  Columns 1 through 4    -1.2445    0.2309    1.4978   -0.3785   -1.2331    0.2208    1.5108   -0.3586  Column 5    -0.1058   -0.1399meanp =   -0.7240   -1.0720stdp =    0.6236    0.9148  [ptrans,transMat] = prepca(pn,0.02)   ptrans =  Columns 1 through 4     1.7519   -0.3194   -2.1274    0.5212  Column 5     0.1738transMat =

   -0.7071   -0.7071  

C413. POSTMNNMX

В этом примере сначала с помощью функции premnmx выполняется масштабирование обучающей последовательности к диапазону [-1 1], затем создается и обучается нейронная сеть прямой передачи, выполняется ее моделирование и восстановление выхода с помощью функции postmnmx.

P = [-0.92 0.73 -0.47  0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93];t = [-0.08 3.40 -0.82  0.69 3.10];[pn,minp,maxp,tn,mint,maxt] = premnmx(P,t);net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');net = train(net,pn,tn); grid onan = sim(net,pn)   TRAINLM, Epoch 0/100, MSE 4.01275/0, Gradient 12.3803/1e-010TRAINLM, Epoch 5/100, MSE 4.2096e-026/0, Gradient 6.29848e-013/1e-010TRAINLM, Minimum gradient reached, performance goal was not met. an =  Columns 1 through 4    -0.6493    1.0000   -1.0000   -0.2844  Column 5     0.8578  a = postmnmx(an,mint,maxt)   a =  Columns 1 through 4    -0.0800    3.4000   -0.8200    0.6900  Column 5     3.1000  C414. POSTSTD

В этом примере сначала с помощью функции prestd выполняется масштабирование обучающей последовательности к нормальному закону распределения с параметрами [0 1], затем создается и обучается нейронная сеть прямой передачи, выполняется ее моделирование и восстановление выхода с помощью функции poststd.

p = [-0.92 0.73 -0.47  0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93];t = [-0.08 3.40 -0.82 0.69 3.10];   [pn,meanp,stdp,tn,meant,stdt] = prestd(p,t);net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');net = train(net,pn,tn); grid onan = sim(net,pn)   TRAINLM, Epoch 0/100, MSE 2.34864/0, Gradient 9.59914/1e-010TRAINLM, Epoch 4/100, MSE 1.24883e-022/0, Gradient 4.57729e-011/1e-010TRAINLM, Minimum gradient reached, performance goal was not met. an =  Columns 1 through 4    -0.7049    1.1285   -1.0947   -0.2992  Column 5     0.9704  a = poststd(an,meant,stdt)   a =  Columns 1 through 4    -0.0800    3.4000   -0.8200    0.6900  Column 5     3.1000  C415. POSTREG

В данном примере с помощью функции prestd нормализуется множество обучающих данных, на нормализованных данных вычисляются главные составляющие преобразования, создается и обучается сеть, используя pca данные, сеть моделируется. Затем выход сети с помощью функции poststd денормализуется и вычисляется линейная регрессия между выходом (ненормализованным) сети и целями, чтобы проверить качество обучения сети.

P = [-0.92 0.73 -0.47  0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93];T = [-0.08 3.40 -0.82 0.69 3.10];[pn,meanp,stdp,tn,meant,stdt] = prestd(P,T);[ptrans,transMat] = prepca(pn,0.02);net = newff(minmax(ptrans),[5 1],{'tansig' 'purelin'},'trainlm');net = train(net,ptrans,tn); grid onan = sim(net,ptrans)   TRAINLM, Epoch 0/100, MSE 1.06854/0, Gradient 6.56843/1e-010TRAINLM, Epoch 4/100, MSE 7.84424e-030/0, Gradient 3.04851e-015/1e-010TRAINLM, Minimum gradient reached, performance goal was not met. an =  Columns 1 through 4    -0.7049    1.1285   -1.0947   -0.2992  Column 5     0.9704  a = poststd(an,meant,stdt)   a =  Columns 1 through 4    -0.0800    3.4000   -0.8200    0.6900  Column 5     3.1000   figure(1), clf[m,b,r] = postreg(a,t), grid on % Рис.11.61   m =    1.0000b =  5.0387e-016r =     1  

C417. TRAMNMX

Следующие операторы масштабируют обучающую последовательность к диапазону [-1 1], формируют и обучают нейронную сеть прямой передачи

p = [-10 -7.5 -5 -2.5 0 2.5 5 7.5 10];t = [0 7.07 -10 -7.07 0 7.07 10 7.07 0];[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t);net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');net = train(net,pn,tn); grid on   TRAINLM, Epoch 0/100, MSE 0.685331/0, Gradient 10.0713/1e-010TRAINLM, Epoch 10/100, MSE 6.32948e-022/0, Gradient 4.72377e-011/1e-010TRAINLM, Minimum gradient reached, performance goal was not met.  

Если в дальнейшем к обученной сети будут приложены новые входы, то они должны быть масштабированы с помощью функции tramnmx. Выход сети должен быть восстановлен с помощью функции postmnmx.

p2 = [4 -7]; pn = tramnmx(p2,minp,maxp);an = sim(net,pn)   an =    0.9440    0.0067  a = postmnmx(an,mint,maxt)   a =

    9.4399    0.0671  

C417. TRASTD

Следующие операторы масштабируют обучающую последовательность к нормальному закону распределения с параметрами [0 1], формируют и обучают нейронную сеть прямой передачи

p = [-0.92 0.73 -0.47  0.74 0.29;  -0.08 0.86 -0.67 -0.52 0.93];t = [-0.08 3.4 -0.82 0.69 3.1];[pn,meanp,stdp,tn,meant,stdt] = prestd(p,t);net = newff(minmax(pn),[5 1],{'tansig' 'purelin'},'trainlm');net = train(net,pn,tn); grid on   TRAINLM, Epoch 0/100, MSE 4.09289/0, Gradient 14.841/1e-010TRAINLM, Epoch 5/100, MSE 5.42342e-032/0, Gradient 1.24667e-015/1e-010TRAINLM, Minimum gradient reached, performance goal was not met.   

Если в дальнейшем к обученной сети будут приложены новые входы, то они должны быть масштабированы с помощью функции trastd. Выход сети должен быть восстановлен с помощью функции poststd.

p2 = [1.5 -0.8; 0.05 -0.3];pn = trastd(p2,meanp,stdp);an = sim(net,pn)   an =    1.1259   -0.9903  a = poststd(an,meant,stdt)   a =

    3.3951   -0.6218  

C418. TRAPCA

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

P = [-1.5 -0.58 0.21 -0.96 -0.79;  -2.2 -0.87 0.31 -1.40 -1.20];t = [-0.08 3.4 -0.82 0.69 3.1];[pn,meanp,stdp,tn,meant,stdt] = prestd(P,t);[ptrans,transMat] = prepca(pn,0.02)   ptrans =  Columns 1 through 4     1.7519   -0.3194   -2.1274    0.5212  Column 5     0.1738transMat =   -0.7071   -0.7071  net = newff(minmax(ptrans),[5 1],{'tansig' 'purelin'},'trainlm');net = train(net,ptrans,tn); grid on   TRAINLM, Epoch 0/100, MSE 3.14416/0, Gradient 8.99022/1e-010TRAINLM, Epoch 7/100, MSE 1.80389e-027/0, Gradient 2.06364e-014/1e-010TRAINLM, Minimum gradient reached, performance goal was not met.  

Если в дальнейшем к сети будут приложены новые входы, то они должны быть масштабированы с помощью функций trastd и trapca. Выход сети должен быть восстановлен с помощью функции poststd:

p2 = [1.50 -0.8;       0.05 -0.3];p2n = trastd(p2,meanp,stdp);p2trans = trapca(p2n,transMat)   p2trans =   -3.3893   -0.5106  an = sim(net,p2trans)   an =   -0.9733    0.9177  a = poststd(an,meant,stdt)   a =

   -0.5895    3.0000  

Обновлено 22.09.2009 11:40