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

Авторизация







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

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

Модели сетей  С245. NETWORK

Пример:

Создадим шаблон нейронной сети с двумя входами (numInputs = 2), тремя слоями (numLayers = 3) и следующими матрицами связности:

BiasConnect  = [1; 0; 0] размера numLayers´1;inputConnect = [1 1; 0 0; 0 0] размера numLayers´numInputs;layerConnect = [0 0 0; 1 0 0; 0 1 0] размера numLayers´numLayers;outputConnect = [0 0 1] размера 1´ numLayers;targetConnect = [0 0 1] размера 1´ numLayers.net = network(2,3,[1; 0; 0],[1 1; 0 0; 0 0],[0 0 0; 1 0 0; 0 1 0], ... [0 0 1], [0 0 1]);

gensim(net) % Рис.11.1  

Введем линии задержки для входов 1 и 2, а также для слоя 3

net.inputWeights{1,1}.delays = [0 1];net.inputWeights{1,2}.delays = [1 2];net.layerWeights{3,2}.delays = [0 1 2];gensim(net)  

Установим параметры нейронной сети и векторов входа:

net.inputs{1}.range = [0 1];net.inputs{2}.range = [0 1];net.b{1}=-1/4;net.IW{1,1} = [ 0.5 0.5 ]; net.IW{1,2} = [ 0.5 0.25];  net.LW{2,1} = [ 0.5 ]; net.LW{3,2} = [ 0.5 0.25 1];        P = [0.5 1; 1 0.5];

gensim(net)   

C248. NEWP

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

clear, net = newp([0 1; 0 1],1);gensim(net) % Рис.11.6  

Определим следующую последовательность двухэлементных векторов входа P, составленных из 0 и 1:

P = {[0; 0] [0; 1] [1; 0] [1; 1]};  

Обучим персептрон выполнять операцию ЛОГИЧЕСКОЕ И. С этой целью для полного набора входных векторов сформируем последовательность целей

P1 = cat(2, P{:}); T1 = num2cell(P1(1,:)&P1(2,:)) T1 =

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

Применим процедуру адаптации, установив число проходов равным 10:

net.adaptParam.passes = 10; net = adapt(net,P,T1);  

Вектор весов и смещение можно определить следующим образом

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

 ans =     2     1ans =

    -3  

Таким образом, разделяющая линия имеет вид

L: 2p1 + p2 – 3 = 0.

Промоделируем спроектированную нейронную сеть, подав входную обучающую последовательность

Y = sim(net,P)  

 Y =

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

Настройка параметров сети выполнена правильно.

Обучим персептрон выполнять операцию НЕИСКЛЮЧАЮЩЕЕ ИЛИ.

С этой целью для полного набора входных векторов Р сформируем последовательность целей

P1 = cat(2, P{:}); T2 = num2cell(P1(1, :) | P1(2, :))   T2 =

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

Применим процедуру обучения, установив число циклов равным 20:

net.trainParam.epochs = 20; net = train(net,P,T2);   TRAINC, Epoch 0/20TRAINC, Epoch 2/20TRAINC, Performance goal met.  

Вектор весов и смещение можно определить следующим образом

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

 ans =     2     2ans =    -2ans =     2     2ans =

    -2  

Таким образом, разделяющая линия имеет вид

L: 2p1 + 2p2 – 2 = 0.

Промоделируем спроектированную нейронную сеть, подав входную обучающую последовательность

Y = sim(net,P)  

 Y =

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

Обучение и настройка сети выполнены правильно.

C250. NEWLIN

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

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

net = newlin([-1 1], 1, [0 1 2], 0.01);gensim(net)  %Рис.11.7  

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

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

P2 = {1 0 -1 -1 1 1 1 0 -1}; T2 = {2 1 -1 -2 0 2 2 1  0};  

Выполним обучение, используя только обучающие последовательности P1 и T1:

net = train(net,P1,T1);   TRAINB, Epoch 0/100, MSE 0.9/0.TRAINB, Epoch 25/100, MSE 0.0959309/0.TRAINB, Epoch 50/100, MSE 0.0298875/0.TRAINB, Epoch 75/100, MSE 0.0108788/0.TRAINB, Epoch 100/100, MSE 0.00403078/0.TRAINB, Maximum epoch reached.  

Соответствующие значения весов и смещения следующие

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

 ans =    0.9198    0.9301   -0.0876ans =

    0.0396  

Выполним моделирование сети для всех значений входа, объединяющих векторы Р1 и Р2

Y1 = sim(net,[P1 P2]);  

Теперь выполним обучение сети на всем объеме обучающих данных, соответствующем объединению векторов входа {[P1 P2]} и векторов целей {[T1 T2]}.

net = init(net);P3 = [P1 P2]; T3 = [T1 T2];net.trainParam.epochs = 200;net.trainParam.goal = 0.01;net = train(net,P3,T3);   TRAINB, Epoch 0/200, MSE 1.47368/0.01.TRAINB, Epoch 25/200, MSE 0.0478548/0.01.TRAINB, Epoch 50/200, MSE 0.0438463/0.01.TRAINB, Epoch 75/200, MSE 0.0437006/0.01.TRAINB, Epoch 100/200, MSE 0.0436917/0.01.TRAINB, Epoch 125/200, MSE 0.0436911/0.01.TRAINB, Epoch 150/200, MSE 0.0436911/0.01.TRAINB, Epoch 175/200, MSE 0.0436911/0.01.TRAINB, Epoch 200/200, MSE 0.0436911/0.01.TRAINB, Maximum epoch reached.  

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

Значения весов и смещений несколько изменяются

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

ans =    0.9242    0.9869    0.0339ans =

    0.0602  

Результаты моделирования представлены в виде зависимости Y3.

Y3 = sim(net,[P1 P2]);figure(1), clf, plot(cat(2,Y1{:}),'r'), hold on, grid onstairs(cat(2,T3{:}),'k'), plot(cat(2,Y3{:}),'b')C253. NEWLIND

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

P = 0:3; T = [0.0 2.0 4.1 5.9];   

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

net = newlind(P,T); gensim(net) % Рис.11.11  

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

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

ans =    1.9800ans =

    0.0300  

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

Y = sim(net,P)  

Y =

    0.0300    2.0100    3.9900    5.9700  

Многослойные сети.С255. NEWFF

Создать нейронную сеть, чтобы обеспечить следующее отображение последовательности входа P в последовательность целей T:

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

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

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

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

Y = sim(net,P); figure(1), clfplot(P, T, P, Y, 'o'), grid on %Рис.11.13  

Обучим сеть в течение 50 циклов:

net.trainParam.epochs = 50;net = train(net,P,T);  TRAINLM, Epoch 0/50, MSE 0.0154002/0, Gradient 0.190957/1e-010TRAINLM, Epoch 25/50, MSE 0.0153319/0, Gradient 0.0398632/1e-010TRAINLM, Epoch 50/50, MSE 0.0153054/0, Gradient 0.017265/1e-010TRAINLM, Maximum epoch reached, performance goal was not met.  

Выполним моделирование сформированной двухслойной сети, используя обучающую последовательность входа

Y = sim(net,P);figure(2), clf, plot(P,T,P,Y,'o'), grid on % Рис.11.15 C258. NEWFFTD

Создать нейронную сеть, чтобы обеспечить следующее отображение последовательности входа P в последовательность целей T:

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};  

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

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

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

net.trainParam.epochs = 50;net = train(net,P,T); Y = sim(net,P)  TRAINLM, Epoch 0/50, MSE 3.10515/0, Gradient 40.7492/1e-010TRAINLM, Epoch 4/50, MSE 5.31364e-031/0, Gradient 1.09916e-014/1e-010TRAINLM, Minimum gradient reached, performance goal was not met. Y =   Columns 1 through 3    [1]    [-1.0000]    [-3.8858e-016]  Columns 4 through 6    [1]    [1.9429e-015]    [-1.0000]  Columns 7 through 9    [1]    [-1.0000]    [-3.8858e-016]  Columns 10 through 11    [-3.8858e-016]    [-3.8858e-016]  Columns 12 through 14    [1]    [1.9429e-015]    [-1.0000]  Columns 15 through 16

    [-3.8858e-016]    [1]  

C260. NEWCF

Создать каскадную нейронную сеть, чтобы обеспечить следующее отображение последовательности входа P в последовательность целей T:

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

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

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

Обучим сеть в течение 50 циклов:

net.trainParam.epochs = 50; net = train(net,P,T);   TRAINLM, Epoch 0/50, MSE 3.01162/0, Gradient 96.4205/1e-010TRAINLM, Epoch 19/50, MSE 1.63682e-024/0, Gradient 1.1003e-012/1e-010TRAINLM, Minimum gradient reached, performance goal was not met.  

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

Y = sim(net,P);figure(1), clf, plot(P,T,P,Y,'or'), grid on  

Радиальные базисные сети

С263. NEWRB

Создадим радиальную базисную сеть для следующей обучающей последовательности при средней квадратичной ошибки 0.1:

P = 0:3; T = [0.0 2.0 4.1 5.9];net = newrb(P,T,0.1); net.layers{1}.sizegensim(net)   NEWRB, neurons = 0, SSE = 1.80858ans =

     3  

Сформированная радиальная базисная сеть имеет 3 нейрона с функцией активации radbas.

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

figure(1), clf,plot(P,T,'*r','MarkerSize',2,'LineWidth',2), hold onV = sim(net,P);  % Векторы входа из обучающего множества plot(P,V,'ob','MarkerSize',8, 'LineWidth',2), grid onP1 = 0.5:2.5; Y = sim(net,P1)plot(P1,Y,'+k','MarkerSize',10, 'LineWidth',2)% Рис.11.21   Y =

    1.0346    2.8817    5.5053  

С265. NEWRBE

Создадим радиальную базисную сеть с нулевой ошибкой для следующей обучающей последовательности:

P = 0:3; T = [0.0 2.0 4.1 5.9];net = newrbe(P,T); net.layers{1}.size  ans =

     4  

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

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

figure(1), clf, plot(P,T,'*r','MarkerSize',2,'LineWidth',2)hold on, grid onV = sim(net,P);  % Векторы входа из обучающего множества plot(P,V,'ob','MarkerSize',8, 'LineWidth',2)P1 = 0.5:2.5; Y = sim(net,P1)plot(P1,Y,'+k','MarkerSize',10, 'LineWidth',2)% Рис.11.22   Y =

    1.0346    2.8817    5.5053  

С267. NEWGRNN

Создадим обобщенную регрессионную сеть с входами P и целями T:

P = 0:3; T = [0.0 2.0 4.1 5.9];net = newgrnn(P,T); gensim(net)  

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

figure(1), clf, plot(P,T,'*r','MarkerSize',2,'LineWidth',2)hold on, grid onV = sim(net,P);  % Векторы входа из обучающего множества plot(P,V,'ob','MarkerSize',8, 'LineWidth',2)P1 = 0.5:2.5; Y = sim(net,P1);plot(P1,Y,'+k','MarkerSize',10, 'LineWidth',2)% Рис.11.25Y = sim(net, 0:0.5:3)  Y =  Columns 1 through 4     0.8104    1.3759    2.1424    3.0300  Columns 5 through 7

    3.9030    4.6345    5.1615  

Из анализа результатов моделирования следует, что на границах интервала расхождения существенны.

Если уменьшить значение параметра влияния до 0.1, то мы получим аппроксимацию высокой точности

net = newgrnn(P,T,0.1); Y = sim(net, 0:0.5:3)   Y =  Columns 1 through 4     0.0000    1.0000    2.0000    3.0500  Columns 5 through 7

    4.1000    5.0000    5.9000  

С269. NEWPNN

Задача классификации определена множествами входа P и индексов класса Tc:

 P = [1 2 3 4 5 6 7]; Tc = [1 2 3 2 2 3 1];  

Индексы класса преобразуем в вектор целей и сформируем вероятностную нейронную сеть:

T = ind2vec(Tc);net = newpnn(P,T); gensim(net)  

Выполним моделирование сети, используя обучающее множество входов

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

     1     2     3     2     2     3     1  

Самоорганизующиеся сети

С271. NEWC

Зададим массив входа P в виде четырех двухэлементных векторов:

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

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

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

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

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

Центры кластеризации расположены в точках

w = net.IW{1}  

w =    0.8031    0.8031

    0.1536    0.1969  

Построим на плоскости  входных векторов точки кластеризации и сами входные векторы

figure(1), clf, plot(P(1,:),P(2,:)','+b','MarkerSize',8, 'Linewidth',2) % Рис.7.3title(' Векторы входа'), xlabel('P(1,:)'), ylabel('P(2,:)')hold on, grid on, axis([0 1,0 1])plot(w(:,1), w(:,2)', 'or', 'MarkerSize',8, 'Linewidth',2)  

Моделирование сети с определением близости проверяемых точек к центрам кластеризации можно реализовать следующим образом

P1 = [0.2:0.1:0.7; 0.2:0.1:0.7]Y = sim(net,P1); Yc = vec2ind(Y)   P1 =  Columns 1 through 4     0.2000    0.3000    0.4000    0.5000    0.2000    0.3000    0.4000    0.5000  Columns 5 through 6     0.6000    0.7000    0.6000    0.7000Yc =

     2     2     2     1     1     1  

С273. NEWSOM

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

P = [rand(1,400)*2; rand(1,400)];net = newsom([0 2; 0 1],[3 5]); gensim(net) 

Построим топологию двумерной карты Кохонена

figure(1), clf, plotsom(net.layers{1}.positions), grid on %Рис.11.29   

Затем реализуется процедура обучения. Следует отметить, что процедура  длится достаточно долго, поэтому для иллюстрации ограничимся 3 циклами:

net.trainparam.epochs = 3; tic, net = train(net,P); tocfigure(2), clf, plot(P(1,: ),P(2,: ),'.g','MarkerSize',10)hold on, plotsom(net.iw{1,1},net.layers{1}.distances)  TRAINR, Epoch 0/3TRAINR, Epoch 3/3TRAINR, Maximum epoch reached.elapsed_time =

   10.3800  

Промоделируем обученную карту Кохонена на массиве векторов входа

a = sim(net,P);figure(2), clf, bar(sum(a')) %Рис.11.31  

Сети – классификаторы входных векторов.

С276. NEWLVQ

Векторы входа P и выходные классы Tc, представленные ниже, определяют задачу классификации, которая будет решена LVQ сетью:

P = [-3 -2 -2 0 0  0  0 +2 +2 +3;  0 +1 -1 2 1 -1 -2 +1 -1  0];

Tc = [1  1  1 2 2  2  2  1  1  1];  

Целевые классы Tc преобразуем к целевым векторам T, создадим сеть LVQ со входами P, четырьмя нейронами и долями распределения по классам [0.6 0.4]

T = ind2vec(Tc);net = newlvq(minmax(P),4,[.6 .4]); gensim(net) %  

Выполним обучение сети:

net = train(net,P,T);  

TRAINR, Epoch 0/100TRAINR, Epoch 2/100TRAINR, Performance goal met.  

Промоделируем сеть на векторе входа

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

Yc =  Columns 1 through 7      1     1     1     2     2     2     2  Columns 8 through 10

     1     1     1  

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

С277. NEWLM

Зададим вход P в виде случайной булевой последовательности из нулей и единиц; выходом сети должна быть такая булева последовательность T, элементы которой принимают значение 1 только в том случае, когда в последовательности P встретились две единицы подряд:

P = round(rand(1,20))T = [0 (P(1:end-1)+P(2:end)==2)]   P =  Columns 1 through 7      0     1     0     0     0     1     1  Columns 8 through 14      1     1     0     0     0     1     0  Columns 15 through 20      1     0     0     1     1     0T =  Columns 1 through 7      0     0     0     0     0     0     1  Columns 8 through 14      1     1     0     0     0     0     0  Columns 15 through 20

     0     0     0     0     1     0  

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

Pseq = con2seq(P); Tseq = con2seq(T);  

Создадим сеть Элмана с диапазоном входного сигнала от 0 до 1 с 10 скрытыми и одним выходным нейронами:

net = newelm([0 1],[10 1],{'tansig','logsig'});  gensim(net)  

Затем обучим сеть с допустимой средней квадратичной ошибкой 0.001 и смоделируем ее:

net.trainParam.goal = 0.001; net.trainParam.epochs = 1000;net = train(net,Pseq,Tseq);Y = sim(net,Pseq); Y1 = seq2con(Y);E = round(T-Y1{1})  TRAINGDX, Epoch 0/1000, MSE 0.187402/0.001, Gradient 0.189387/1e-006TRAINGDX, Epoch 25/1000, MSE 0.1745/0.001, Gradient 0.176499/1e-006TRAINGDX, Epoch 50/1000, MSE 0.143774/0.001, Gradient 0.152248/1e-006TRAINGDX, Epoch 75/1000, MSE 0.0774428/0.001, Gradient 0.128802/1e-006TRAINGDX, Epoch 100/1000, MSE 0.0225923/0.001, Gradient 0.0456008/1e-006TRAINGDX, Epoch 125/1000, MSE 0.00349329/0.001, Gradient 0.00901132/1e-006TRAINGDX, Epoch 140/1000, MSE 0.000923021/0.001, Gradient 0.00261185/1e-006TRAINGDX, Performance goal met.E =  Columns 1 through 7      0     0     0     0     0     0     0  Columns 8 through 14      0     0     0     0     0     0     0  Columns 15 through 20      0     0     0     0     0     0  C280. NEWHOP

Создадим сеть Хопфилда с двумя устойчивыми точками в трехмерном пространстве

clear, T = [-1 -1 1; 1 -1 1]';net = newhop(T); gensim(net)  

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

Ai = T; [Y,Pf,Af] = sim(net,2,[],Ai); Y   Y =    -1     1    -1    -1     1     1  

Таким образом, вершины гиперкуба являются устойчивыми точками равновесия сети Хопфилда.

Проверим сходимость сети при произвольном входном векторе Ai

Ai = {[-0.9; -0.8; 0.7]};

[Y,Pf,Af] = sim(net,{1 5},{},Ai); Y{1}  

ans =    -1    -1     1  

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

Функции активации

Персептрон

С282. HARDLIM

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

name = hardlim('name')dname = hardlim('deriv')inrange = hardlim('active')outrange = hardlim('output')   name =Hard Limitdname =dhardliminrange =     0     0outrange =

     0     1  

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

N = [0.1; 0.8; -0.7]; A = hardlim(N), dA_dN = dhardlim(N,A)   A =     1     1     0dA_dN =     0     0

     0  

 С283. HARDLIMS

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

name = hardlims('name')dname = hardlims('deriv')inrange = hardlims('active')outrange = hardlims('output')   name =Symmetric Hard Limitdname =dhardlmsinrange =     0     0outrange =

    -1     1  

 

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

N = [0.1; 0.8; -0.7]; A = hardlims(N),   dA_dN = dhardlms(N,A)   A =     1     1    -1dA_dN =     0     0

     0  

 

Линейные сети

С284. PURELIN

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

name = purelin('name')dname = purelin('deriv')inrange = purelin('active')outrange = purelin('output')   name =Lineardname =dpurelininrange =  -Inf   Infoutrange =  -Inf   Inf   

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

N = [0.1; 0.8; -0.7]; A = purelin(N),   A_dN = dpurelin(N,A)  A =    0.1000    0.8000   -0.7000A_dN =     1     1     1  С285. POSLIN

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

name = poslin('name')dname = poslin('deriv')inrange = poslin('active')outrange = poslin('output')   name =Positive Lineardname =dposlininrange =     0   Infoutrange =

     0   Inf  

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

N = [0.1; 0.8; -0.7]; A = poslin(N),  dA_dN = dposlin(N,A)  A =    0.1000    0.8000         0dA_dN =     1     1

     0  

С286. SATLIN

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

name = satlin('name')dname = satlin('deriv')inrange = satlin('active')outrange = satlin('output')  name =Saturating Lineardname =dsatlininrange =     0     1outrange =

     0     1  

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

N = [0.1; 0.8; -0.7]; A = satlin(N),  dA_dN = dsatlin(N,A)   A =    0.1000    0.8000         0dA_dN =     1     1

     0  

С288. SATLINS

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

name = satlins('name')dname = satlins('deriv')inrange = satlins('active')outrange = satlins('output')   name =Symmetric Saturating Lineardname =dsatlinsinrange =    -1     1outrange =

    -1     1  

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

N = [0.1; 0.8; -0.7]; A = satlins(N),  dA_dN = dsatlins(N,A) A =    0.1000    0.8000   -0.7000dA_dN =     1     1

     1  

Радиальные базисные сети

С289. RADBAS

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

name = radbas('name')dname = radbas('deriv')inrange = radbas('active')outrange = radbas('output')  name =Radial Basisdname =dradbasinrange =    -2     2outrange =

     0     1  

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

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

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

N = [0.1; 0.8; -0.7]; A = radbas(N), dA_dN = dradbas(N,A)  A =    0.9900    0.5273    0.6126dA_dN =   -0.1980   -0.8437

    0.8577  

С290. TRIBAS

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

name = tribas('name')dname = tribas('deriv')inrange = tribas('active')outrange = tribas('output')  name =Triangle Basisdname =dtribasinrange =    -1     1outrange =

     0     1  

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

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

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

N = [0.1; 0.8; -0.7]; A = tribas(N),  dA_dN = dtribas(N,A)  A =    0.9000    0.2000    0.3000dA_dN =    -1    -1

     1  

Самоогрганизующиеся сети

С292. COMPET

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

name = compet('name')dname = compet('deriv')inrange = compet('active')outrange = compet('output')   name =Competitivedname =     ''inrange =  -Inf   Infoutrange =

     0     1  

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

n = [0; 1; -0.5; 0.5]; a = compet(n);figure(1), clfsubplot(2,1,1), bar(n), ylabel('n')subplot(2,1,2), bar(a), ylabel('a')  C293. SOFTMAX

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

name = softmax('name')dname = softmax('deriv')inrange = softmax('active')outrange = softmax('output')   name =Soft Maxdname =     ''inrange =  -Inf   Infoutrange =

     0     1  

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

n = [0; 1; -0.5; 0.5]; a = softmax(n);figure(1), clfsubplot(2,1,1), bar(n), ylabel('n')subplot(2,1,2), bar(a), ylabel('a')  

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