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

Авторизация







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

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

Рекуррентные сети

С294. LOGSIG

Информация о функции активации logsig:

name = logsig('name')dname = logsig('deriv')inrange = logsig('active')outrange = logsig('output')   name =Log Sigmoiddname =dlogsiginrange =    -4     4outrange =

     0     1  

Построим график функции активации logsig:

n = -5:0.1:5; a = logsig(n);figure(1), clf, plot(n,a), grid on  

Зададим следующий вектор входа логистической функции активации для слоя из 3 нейронов и рассчитаем векторы выхода A и производной dA_dN:

N = [0.1; 0.8; -0.7]; A = logsig(N), dA_dN = dlogsig(N,A)   A =    0.5250    0.6900    0.3318dA_dN =    0.2494    0.2139

    0.2217  

С296. TANSIG

Информация о функции активации tansig:

name = tansig('name')dname = tansig('deriv')inrange = tansig('active')outrange = tansig('output')   name =Tan Sigmoiddname =dtansiginrange =    -2     2outrange =

    -1     1  

Следующая последовательность команд строит график функции активации tansig:

n = -3:0.1:3; a = tansig(n);figure(1), clf, plot(n,a), grid on 

Зададим следующий вектор входа гиперболической тангенциальной функции активации для слоя из 3 нейронов и рассчитаем векторы выхода A и производной dA_dN:

N = [0.1; 0.8; -0.7]; A = tansig(N),  dA_dN = dtansig(N,A)   A =    0.0997    0.6640   -0.6044dA_dN =    0.9901    0.5591

    0.6347  

Синаптические функции

Функции взвешивания и расстояний

С298. DOTPROD

Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W и вектор входа P:

W = rand(4,3), P = rand(3,1);  P'Z = dotprod(W,P); Z'  W =    0.5786    0.8690    0.1990    0.0143    0.3324    0.3554    0.6843    0.5951    0.4652    0.8174    0.8755    0.3119ans =    0.0856    0.3270    0.1833ans =

    0.3702    0.1751    0.3384    0.4134  

Определим имя М-функции, которая вычисляет производную взвешенной функции в виде скалярного произведения

df = dotprod('deriv')  

df =

ddotprod  

Вычислим производные скалярного произведения по каждому аргументу

dZ_dP = ddotprod('p',W,P,Z)dZ_dW = ddotprod('w',W,P,Z)   dZ_dP =    0.5786    0.8690    0.1990    0.0143    0.3324    0.3554    0.6843    0.5951    0.4652    0.8174    0.8755    0.3119dZ_dW =    0.0856    0.3270    0.1833  

C299. NORMPROD

Определим случайную весовую матрицу W и вектор входа P и рассчитаем соответствующий взвешенный вход Z:

W = rand(4,3), P = rand(3,1); P'Z = normprod(W,P); Z'   W =    0.7504    0.3715    0.3784    0.7498    0.8191    0.5556    0.2033    0.3740    0.2942    0.7711    0.4528    0.4704ans =    0.6137    0.9855    0.4298ans =

    0.4876    0.7423    0.3055    0.5528  

C300. DIST

Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W размера 4´3 и вектор входа P размера 3´1:

W = rand(4,3); P = rand(3,1);Z = dist(W,P)  Z =    0.7709    0.7344    0.9168

    0.4496  

Рассмотрим сеть с топологией, для которой задана случайная матрица координат для 10 нейронов в трехмерном пространстве:

pos = rand(3,10); figure(1), clf, plotsom(pos)

Рассчитаем матрицу евклидовых расстояний между ними:

D = dist(pos)  D =  Columns 1 through 4          0    1.1593    0.4322    0.6111    1.1593         0    0.7624    0.9547    0.4322    0.7624         0    0.5944    0.6111    0.9547    0.5944         0    0.5083    1.0085    0.3617    0.7094    0.8022    0.4755    0.4894    0.4819    0.8231    0.9197    0.6729    0.3889    0.5363    0.8468    0.2398    0.8280    0.6459    0.6005    0.2508    0.5793    0.6291    0.8130    0.4113    0.4157  Columns 5 through 8     0.5083    0.8022    0.8231    0.5363    1.0085    0.4755    0.9197    0.8468    0.3617    0.4894    0.6729    0.2398    0.7094    0.4819    0.3889    0.8280         0    0.7149    0.6493    0.3683    0.7149         0    0.4978    0.6846    0.6493    0.4978         0    0.8611    0.3683    0.6846    0.8611         0    0.4189    0.3303    0.5338    0.3930    0.3993    0.4132    0.2775    0.5846  Columns 9 through 10     0.6459    0.6291    0.6005    0.8130    0.2508    0.4113    0.5793    0.4157    0.4189    0.3993    0.3303    0.4132    0.5338    0.2775    0.3930    0.5846         0    0.2916    0.2916         0  C302. NEGDIST

Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W размера 4´3 и вектор входа P размера 3´1:

W = rand(4,3); P = rand(3,1);Z = negdist(W,P)  Z =   -0.2495   -0.6759   -0.6959

   -0.3220  

C303. MANDIST

Вычислим вектор взвешенных входов Z, если заданы случайные матрица весов W размера 4´3 и вектор входа P размера 3´1: 

W = rand(4,3); P = rand(3,1);Z = mandist(W,P)  Z =    1.1527    0.8322    0.5810

    0.8248  

Рассмотрим сеть с топологией, для которой задана случайная матрица координат для 10 нейронов в трехмерном пространстве:

pos = rand(3,10); figure(1), clf, plotsom(pos)  

Рассчитаем матрицу евклидовых расстояний между ними:

D = mandist(pos)  D =  Columns 1 through 4          0    1.4762    1.2734    1.7250    1.4762         0    1.0259    1.1297    1.2734    1.0259         0    0.4516    1.7250    1.1297    0.4516         0    1.0001    0.5871    0.9674    1.3264    1.5999    0.5968    0.7643    0.9726    1.5179    0.6554    0.9023    1.1435    1.9948    0.7160    1.1132    1.1711    1.2926    1.5432    0.5173    0.5361    1.0572    0.4190    0.7406    1.1921  Columns 5 through 8     1.0001    1.5999    1.5179    1.9948    0.5871    0.5968    0.6554    0.7160    0.9674    0.7643    0.9023    1.1132    1.3264    0.9726    1.1435    1.1711         0    0.8495    0.9874    1.1058    0.8495         0    0.2168    0.3950    0.9874    0.2168         0    0.5011    1.1058    0.3950    0.5011         0    1.4847    1.0976    1.0155    1.4925    0.2881    0.5613    0.6993    0.9376  Columns 9 through 10     1.2926    1.0572    1.5432    0.4190    0.5173    0.7406    0.5361    1.1921    1.4847    0.2881    1.0976    0.5613    1.0155    0.6993    1.4925    0.9376         0    1.2304    1.2304         0  C305. BOXDIST

Пусть задан массив случайных координат трехмерного пространства, в которых размещены 10 нейронов.

pos = rand(3,10); figure(1), clf, plotsom(pos) 

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

d = boxdist(pos)   d =  Columns 1 through 4          0    0.3489    0.6079    0.6925    0.3489         0    0.7883    0.6322    0.6079    0.7883         0    0.2023    0.6925    0.6322    0.2023         0    0.5053    0.6620    0.6220    0.6318    0.6334    0.3989    0.7898    0.7598    0.4530    0.6334    0.1549    0.3527    0.6165    0.3256    0.6768    0.6865    0.3630    0.2419    0.8707    0.7146    0.5207    0.7011    0.6201    0.6299  Columns 5 through 8     0.5053    0.6334    0.4530    0.6165    0.6620    0.3989    0.6334    0.3256    0.6220    0.7898    0.1549    0.6768    0.6318    0.7598    0.3527    0.6865         0    0.6635    0.6192    0.5456    0.6635         0    0.7472    0.2296    0.6192    0.7472         0    0.6739    0.5456    0.2296    0.6739         0    0.7444    0.6407    0.7158    0.5675    0.2628    0.7026    0.6173    0.5006  Columns 9 through 10     0.3630    0.5207    0.2419    0.7011    0.8707    0.6201    0.7146    0.6299    0.7444    0.2628    0.6407    0.7026    0.7158    0.6173    0.5675    0.5006         0    0.7835    0.7835         0  С306. LINKDIST

Пусть задан массив случайных координат трехмерного пространства, в которых размещены 10 нейронов. Требуется вычислить массив расстояний связи между этими нейронами:

pos = rand(3,10); figure(1), clf, plotsom(pos)  d = linkdist(pos)   d =  Columns 1 through 7      0     1     1     1     1     1     1     1     0     1     1     1     1     1     1     1     0     1     1     1     1     1     1     1     0     1     1     1     1     1     1     1     0     1     2     1     1     1     1     1     0     1     1     1     1     1     2     1     0     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1  Columns 8 through 10      1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     0     1     2     1     0     1

     2     1     0  

Функции накопления

С307. NETSUM

Вычислить функцию накопления потенциала для следующих взвешенных входов:

Z1 = [ 1 2 4;  3  4 1]; Z2 = [-1 2 2; -5 -6 1];N = netsum(Z1,Z2)  N =     0     4     6

    -2    -2     2  

Вычислить функцию накопления с учетом вектора смещения b. Поскольку массивы Z1 и Z2 составлены из трех векторов, то с помощью функции concur должен быть создан массив из трех копий  вектора смещения b для того, чтобы все размерности совпадали:

b = [0; -1]; N = netsum(Z1,Z2,concur(b,size(Z1,2)))   N =     0     4     6

    -3    -3     1  

Определим две весовых матрицы входа для слоя с тремя нейронами:

Z1 = [0; 1; -1]; Z2 = [1; 0.5; 1.2];  

Вычислить вход нейрона N с помощью функции netsum и затем найти производные по каждому из взвешенных входов:

N = netsum(Z1,Z2)dN_dZ1 = dnetsum(Z1,N)dN_dZ2 = dnetsum(Z2,N)   N =    1.0000    1.5000    0.2000dN_dZ1 =     1     1     1dN_dZ2 =     1     1     1  C309. NETPROD

Вычислить функцию накопления для следующих взвешенных входов:

Z1 = [ 1 2 4;  3  4 1]; Z2 = [-1 2 2; -5 -6 1];N = netprod(Z1,Z2)  N =    -1     4     8

   -15   -24     1  

Вычислить функцию накопления с учетом вектора смещения b. Поскольку массивы Z1 и Z2 составлены из трех векторов, то с помощью функции concur должен быть создан массив из трех копий  вектора смещения b для того, чтобы все размерности совпадали:

b = [0; -1]; N = netprod(Z1,Z2,concur(b,size(Z1,2)))   N =     0     0     0

    15    24    -1  

Определим два взвешенных входа для слоя с тремя нейронами:

Z1 = [0; 1; -1]; Z2 = [1; 0.5; 1.2];  

Вычислить вход нейрона N с помощью функции netprod и затем найти производные по каждому из взвешенных входов:

N = netprod(Z1,Z2); N'dN_dZ1 = dnetprod(Z1,N); dN_dZ1' dN_dZ2 = dnetprod(Z2,N); dN_dZ2'  ans =         0    0.5000   -1.2000Warning: Divide by zero.> In C:\MATLAB6P1\toolbox\nnet\nnet\dnetprod.m at line 43ans =       NaN    0.5000    1.2000ans =

     0     1    -1  

Функции инициализацииС310. INIT

Сформировать персептрон с одним нейроном, вход которого имеет 2 элемента со значениями в диапазонах [0 1] и [ –2  2]:

net = newp([0 1; -2 2], 1);net.initFcnnet.layers{1}.initFcnnet.inputWeights{1}.initFcnnet.biases{1}.initFcn  ans =initlayans =initwbans =initzeroans =

initzero  

Выведем значения установленных весов и смещений:

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

ans =     0     0ans =

     0  

Обучим персептрон на следующих обучающих множествах

P = [0 1 0 1; 0 0 1 1]; T = [0 0 0 1];net = train(net,P,T); net.IW{1,1}, net.b{1}  TRAINC, Epoch 0/100TRAINC, Epoch 6/100TRAINC, Performance goal met. ans =     1     2ans =

    -3  

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

net = init(net); net.IW{1,1}, net.b{1}  ans =     0     0ans =

     0  

С314. INITZERO

Присвоить нулевые значения матрице весов и вектору смещения для слоя с 5 нейронами и вектором входа, элементы которого принимают значения в диапазонах [0 1], [-2 2]:

W = initzero(5, [0 1; -2 2]),  b = initzero(5, [1 1])   W =     0     0     0     0     0     0     0     0     0     0b =     0     0     0     0

     0  

С315. MIDPOINT

Присвоить нулевые значения матрице весов и вектору смещения для слоя с 5 нейронами и вектором входа, элементы которого принимают значения в диапазонах [0 1], [-2 2]:

W = midpoint(5,[0 1; -2 2])  

W =    0.5000         0    0.5000         0    0.5000         0    0.5000         0

    0.5000         0  

С316. RANDS

Сформируем с помощью функции rands массивы случайных величин различных размеров:

v = rands(4)M = rands(2,3)W = rands(4,[0 1; -2 2])  v =    0.9003   -0.5377    0.2137   -0.0280M =    0.7826   -0.0871    0.6428    0.5242   -0.9630   -0.1106W =    0.2309   -0.6475    0.5839   -0.1886    0.8436    0.8709

    0.4764    0.8338  

С317. RANDNC

Сформируем случайный массив из четырех нормированных трехэлементных столбцов:

M = randnc(3,4)  

 M =   -0.1499   -0.2452   -0.6491    0.2650    0.6575    0.5220   -0.5343   -0.5817

   -0.7384   -0.8169   -0.5415   -0.7690  

С318. RANDNR

Создадим случайную матрицу из трех нормированных четырехэлементных строк:

W = randnr(3,4)  

 W =   -0.6415    0.5715    0.4582    0.2278    0.5866   -0.0808    0.0598    0.8036

   -0.0957   -0.1419   -0.5186   -0.8377  

С318. INITCON

Начальные значения смещений рассчитаем для слоя с 5 нейронами:

b = initcon(5)  

b =   13.5914   13.5914   13.5914   13.5914

   13.5914  

Функции адаптации и обучения

Функции адаптации

С325. TRAINS

Создать на основе персептрона нейронную сеть с вектором входа из двух элементов со значениями из диапазона [-2 2] и выполнить адаптивное обучение, используя функцию trains:

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

net = newp([-2 2;-2 2],1);  

Формирование векторов входа и цели:

P = {[2;2] [1;-2] [-2;2] [-1;1]}; T = {[0] [1] [0] [1]};  

Адаптивное обучение с использованием трех циклов:

net.adaptFcn = 'trains';  net.adaptParam.passes = 3;  [net,a,e]=adapt(net,P,T);  a    a =

    [0]    [1]    [0]    [1]  

Выход сети после адаптивного обучения полностью совпадает с вектором целей.

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

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

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

Формирование векторов входа и цели:

P1 = {0 -1 1 1 0 -1 1 0 0 1}; T1 = {0 -1 0 2 1 -1 0 1 0 1};   

Адаптивное обучение:

net.trainFcn='trains'; net.trainParam.passes = 80;[net,TR]=train(net,P1,T1);  

Моделирование сети при заданном входе:

Y = sim(net,P1); Y = [Y{:}]   Y =  Columns 1 through 4     0.0201   -0.9411    0.0282    1.9344  Columns 5 through 8     0.9732   -0.9411    0.0282    0.9732  Columns 9 through 10

    0.0201    0.9813  

Результат моделирования близок к вектору целей. При этом среднеквадратическая ошибка составляет

E = mse(Y-[T1{:}])  

 E =

    0.0015  

Функции обучения

С331. TRAINB

Сформировать динaмическую линейную  нейронную сеть с одним выходом, линией задержки на входе [0 1], диапазон изменения элементов входа [-1 1]  и адаптивно обучить ее  за 200 циклов с параметром скорости обучения 0.01.

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

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

Формирование векторов входа и цели:

P1 = {0 -1 1 1 0 -1 1 0 0 1}; T1 = {0 -1 0 2 1 -1 0 1 0 1};  

Групповое обучение:

net.trainFcn='trainb'; net.trainParam.epochs = 200;[net,TR]=train(net,P1,T1);   TRAINB, Epoch 0/200, MSE 0.9/0.TRAINB, Epoch 25/200, MSE 0.0999258/0.TRAINB, Epoch 50/200, MSE 0.0146419/0.TRAINB, Epoch 75/200, MSE 0.00216069/0.TRAINB, Epoch 100/200, MSE 0.000318915/0.TRAINB, Epoch 125/200, MSE 4.70722e-005/0.TRAINB, Epoch 150/200, MSE 6.94794e-006/0.TRAINB, Epoch 175/200, MSE 1.02553e-006/0.TRAINB, Epoch 200/200, MSE 1.5137e-007/0.TRAINB, Maximum epoch reached.  

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

Y = sim(net,P1); Y = [Y{:}]   Y =  Columns 1 through 4     0.0002   -0.9994    0.0003    1.9993  Columns 5 through 8     0.9997   -0.9994    0.0003    0.9997  Columns 9 through 10

    0.0002    0.9998  

Результат моделирования близок к вектору целей. При этом среднеквадратическая ошибка составляет

E = mse(Y-[T1{:}])  

 E =

  1.5137e-007  

C334. TRAINC

Сформировать нейронную сеть на основе персептрона с одним выходом и вектором входа из двух элементов, принимающих значения в диапазоне [–2 2].

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

net = newp([-2 2; -2 2],1);  

Формирование векторов входа и цели:

P = [ 2  1 -2 -1;  2 -2  2  1]; T = [ 0  1  0  1];  

Обучение с циклическим представлением входа:

net.trainFcn='trainc';[net,TR]=train(net,P,T);   TRAINC, Epoch 0/100TRAINC, Epoch 3/100TRAINC, Performance goal met.  

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

Y = sim(net, P)  

 Y =

     0     1     0     1  

Найдем значения весов и смещения:

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

 ans =    -2    -3ans =

     1  

C337. TRAINR

Сформировать самоорганизующуюся нейронную сеть для разделения векторов входа на два класса. Векторы входа состоят из двух элементов со значениями из диапазона [0 1]. Сеть имеет два выхода (по числу классов) и обучается с помощью функции trainr.

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

clear, net = newc([0 1; 0 1], 2);  

Формирование векторов входа:

P = [.1 .8 .1 .9;  .2 .9 .1 .8];

 

Обучение с циклическим представлением входа:

net.trainFcn ='trainr';net = train(net,P);  TRAINR, Epoch 0/100TRAINR, Epoch 25/100TRAINR, Epoch 50/100TRAINR, Epoch 75/100TRAINR, Epoch 100/100TRAINR, Maximum epoch reached.  

Выполним моделирование сети, и значения выхода преобразуем в индексы классов:

Y = sim(net,P); Yc = vec2ind(Y)   Yc =

     2     1     2     1  

Градиентные алгоритмы обучения

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

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

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

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

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

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

net.trainParam.epochs=1000; net.trainParam.show=50;net.trainParam.goal = 0.01;[net,TR] = train(net,P,T);  TRAINGD, Epoch 0/1000, MSE 0.015653/0.01, Gradient 0.0317272/1e-010TRAINGD, Epoch 50/1000, MSE 0.0151675/0.01, Gradient 0.0305964/1e-010TRAINGD, Epoch 100/1000, MSE 0.0147153/0.01, Gradient 0.0295528/1e-010TRAINGD, Epoch 150/1000, MSE 0.0142928/0.01, Gradient 0.0285863/1e-010TRAINGD, Epoch 200/1000, MSE 0.0138969/0.01, Gradient 0.0276881/1e-010TRAINGD, Epoch 250/1000, MSE 0.0135251/0.01, Gradient 0.026851/1e-010TRAINGD, Epoch 300/1000, MSE 0.013175/0.01, Gradient 0.0260685/1e-010TRAINGD, Epoch 350/1000, MSE 0.0128447/0.01, Gradient 0.0253352/1e-010TRAINGD, Epoch 400/1000, MSE 0.0125324/0.01, Gradient 0.0246461/1e-010TRAINGD, Epoch 450/1000, MSE 0.0122366/0.01, Gradient 0.0239972/1e-010TRAINGD, Epoch 500/1000, MSE 0.011956/0.01, Gradient 0.0233848/1e-010TRAINGD, Epoch 550/1000, MSE 0.0116892/0.01, Gradient 0.0228057/1e-010TRAINGD, Epoch 600/1000, MSE 0.0114354/0.01, Gradient 0.022257/1e-010TRAINGD, Epoch 650/1000, MSE 0.0111935/0.01, Gradient 0.0217363/1e-010TRAINGD, Epoch 700/1000, MSE 0.0109625/0.01, Gradient 0.0212413/1e-010TRAINGD, Epoch 750/1000, MSE 0.0107419/0.01, Gradient 0.0207702/1e-010TRAINGD, Epoch 800/1000, MSE 0.0105308/0.01, Gradient 0.020321/1e-010TRAINGD, Epoch 850/1000, MSE 0.0103287/0.01, Gradient 0.0198922/1e-010TRAINGD, Epoch 900/1000, MSE 0.0101349/0.01, Gradient 0.0194824/1e-010TRAINGD, Epoch 937/1000, MSE 0.0099965/0.01, Gradient 0.0191906/1e-010TRAINGD, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)  Y =  Columns 1 through 4     0.1034    0.0460    0.0968    0.8716  Columns 5 through 6

    0.8966    0.8968  

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

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

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

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

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

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

net.trainParam.epochs = 500; net.trainParam.goal = 0.01;[net,TR] = train(net,P,T); grid on   TRAINGDA, Epoch 0/500, MSE 0.428879/0.01, Gradient 0.133123/1e-006TRAINGDA, Epoch 25/500, MSE 0.419751/0.01, Gradient 0.143599/1e-006TRAINGDA, Epoch 50/500, MSE 0.379232/0.01, Gradient 0.169519/1e-006TRAINGDA, Epoch 75/500, MSE 0.0778148/0.01, Gradient 0.110517/1e-006TRAINGDA, Epoch 100/500, MSE 0.033615/0.01, Gradient 0.0718189/1e-006TRAINGDA, Epoch 125/500, MSE 0.0209789/0.01, Gradient 0.074307/1e-006TRAINGDA, Epoch 150/500, MSE 0.0141581/0.01, Gradient 0.0685576/1e-006TRAINGDA, Epoch 167/500, MSE 0.00993758/0.01, Gradient 0.0257991/1e-006

TRAINGDA, Performance goal met.  

Выведем график изменения параметра скорости настройки в процессе обучения:

figure(2), clf, plot(TR.lr, 'LineWidth',2), grid ontitle('Параметр скорости настройки')

xlabel('Число циклов')  

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

Y = sim(net,P)  

 Y =  Columns 1 through 4     0.0216    0.0303    0.1558    0.8271  Columns 5 through 6

    0.9506    0.9596  

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

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

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

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

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

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

net.trainParam.epochs = 500; net.trainParam.goal = 0.01;net.trainParam.lr = 0.1;[net,TR] = train(net,P,T);   TRAINGDM, Epoch 0/500, MSE 0.394818/0.01, Gradient 0.718973/1e-010TRAINGDM, Epoch 25/500, MSE 0.0108355/0.01, Gradient 0.024793/1e-010TRAINGDM, Epoch 50/500, MSE 0.0103841/0.01, Gradient 0.0266315/1e-010TRAINGDM, Epoch 59/500, MSE 0.00994986/0.01, Gradient 0.0249995/1e-010TRAINGDM, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)  Y =  Columns 1 through 4     0.0741    0.0436    0.1312    0.8831  Columns 5 through 6

    0.8964    0.8965  

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

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

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

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

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

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

net.trainParam.epochs = 500; net.trainParam.goal = 0.01;[net,TR] = train(net,P,T);   TRAINGDX, Epoch 0/500, MSE 0.416432/0.01, Gradient 0.61579/1e-006TRAINGDX, Epoch 25/500, MSE 0.30052/0.01, Gradient 0.457879/1e-006TRAINGDX, Epoch 50/500, MSE 0.125779/0.01, Gradient 0.353204/1e-006TRAINGDX, Epoch 75/500, MSE 0.0136136/0.01, Gradient 0.0293882/1e-006TRAINGDX, Epoch 90/500, MSE 0.00995653/0.01, Gradient 0.0227043/1e-006

TRAINGDX, Performance goal met.  

Выведем график изменения параметра скорости настройки в процессе обучения:

figure(2), clf, plot(TR.lr, 'LineWidth',2), grid ontitle('Параметр скорости настройки')

xlabel('Число циклов') 

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

Y = sim(net,P)  

 Y =  Columns 1 through 4     0.0796    0.0404    0.1178    0.8777  Columns 5 through 6

    0.8928    0.8929  

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

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

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

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

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

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

net.trainParam.epochs = 50; net.trainParam.show = 10;net.trainParam.goal = 0.01;[net,TR] = train(net,P,T);   TRAINRP, Epoch 0/50, MSE 0.46999/0.01, Gradient 0.140837/1e-006TRAINRP, Epoch 9/50, MSE 0.00869996/0.01, Gradient 0.0321288/1e-006TRAINRP, Performance goal met.  Выполним моделирование сети:Y = sim(net,P)   Y =  Columns 1 through 4     0.0365    0.0340    0.0686    0.8333  Columns 5 through 6

    0.9065    0.9079