Notebook "нейронные сети" Глава 2

Вид материалаДокументы
C418. trapca
С420. calca
C422. calca1
Подобный материал:
1   ...   25   26   27   28   29   30   31   32   33

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.1738

transMat =

-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-010

TRAINLM, Epoch 7/100, MSE 1.80389e-027/0, Gradient 2.06364e-014/1e-010

TRAINLM, 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

Вспомогательные функции

С420. CALCA


Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, тремя нейронами и линией задержки на входе с параметрами [0 2 4]; в сети используется обратная связь с линией задержки [1 2] (рис. 11.62).

net = newlin([0 1],3,[0 2 4]); net.layerConnect(1,1) = 1;

net.layerWeights{1,1}.delays = [1 2];

gensim(net)

Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа P для 8 шагов по времени, вектор начальных условий на линии задержки входов Pi:

P = {0 0.1 0.3 0.6 0.4 0.7 0.2 0.1};

Pi = {0.2 0.3 0.4 0.1}; Pc = [Pi P];

Pd = calcpd(net,8,1,Pc)


Pd(:,:,1) =

[3x1 double]

Pd(:,:,2) =

[3x1 double]

Pd(:,:,3) =

[3x1 double]

Pd(:,:,4) =

[3x1 double]

Pd(:,:,5) =

[3x1 double]

Pd(:,:,6) =

[3x1 double]

Pd(:,:,7) =

[3x1 double]

Pd(:,:,8) =

[3x1 double]

Cформируем вектор начальных условий на линии задержки выхода слоя для каждого из трех нейронов:

Ai = {[0.5; 0.1; 0.2] [0.6; 0.5; 0.2]};

Применяя функцию calca, рассчитаем сигналы в слое на каждом временном шаге TS:

[Ac,N,LWZ,IWZ,BZ] = calca(net,Pd,Ai,1,8)

Ac =

Columns 1 through 2

[3x1 double] [3x1 double]

Columns 3 through 4

[3x1 double] [3x1 double]

Columns 5 through 6

[3x1 double] [3x1 double]

Columns 7 through 8

[3x1 double] [3x1 double]

Columns 9 through 10

[3x1 double] [3x1 double]

N =

Columns 1 through 2

[3x1 double] [3x1 double]

Columns 3 through 4

[3x1 double] [3x1 double]

Columns 5 through 6

[3x1 double] [3x1 double]

Columns 7 through 8

[3x1 double] [3x1 double]

LWZ(:,:,1) =

[3x1 double]

LWZ(:,:,2) =

[3x1 double]

LWZ(:,:,3) =

[3x1 double]

LWZ(:,:,4) =

[3x1 double]

LWZ(:,:,5) =

[3x1 double]

LWZ(:,:,6) =

[3x1 double]

LWZ(:,:,7) =

[3x1 double]

LWZ(:,:,8) =

[3x1 double]

IWZ(:,:,1) =

[3x1 double]

IWZ(:,:,2) =

[3x1 double]

IWZ(:,:,3) =

[3x1 double]

IWZ(:,:,4) =

[3x1 double]

IWZ(:,:,5) =

[3x1 double]

IWZ(:,:,6) =

[3x1 double]

IWZ(:,:,7) =

[3x1 double]

IWZ(:,:,8) =

[3x1 double]

BZ =

[3x1 double]

C422. CALCA1


Создадим линейную сеть с одним входом, изменяющимся в диапазоне от 0 до 1, тремя нейронами и линией задержки на входе с параметрами [0 2 4]; в сети используется обратная связь с линией задержки [1 2] (рис. 11.62).

net = newlin([0 1],3,[0 2 4]); net.layerConnect(1,1) = 1;

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

Вычислим вектор запаздывающих входов Pd, если заданы реализация вектора входа P для 3 шагов по времени, вектор начальных условий на линии задержки входов Pi:

P = {0 0.1 0.3}; Pi = {0.2 0.3 0.4 0.1};

Pc = [Pi P]; Pd = calcpd(net,3,1,Pc)


Pd(:,:,1) =

[3x1 double]

Pd(:,:,2) =

[3x1 double]

Pd(:,:,3) =

[3x1 double]

Cформируем вектор начальных условий на линии задержки выхода слоя для каждого из трех нейронов

Ai = {[0.5; 0.1; 0.2] [0.6; 0.5; 0.2]};

Применяя функцию calca1, рассчитаем сигналы в слое на первом шаге по времени:

[A1,N1,LWZ1,IWZ1,BZ1] = calca1(net,Pd(:,:,1),Ai,1)


A1 =

[3x1 double]

N1 =

[3x1 double]

LWZ1 =

[3x1 double]

IWZ1 =

[3x1 double]

BZ1 =

[3x1 double]

Теперь можно вычислить новые состояния на ЛЗ, используя массивы Ai и A, и рассчитать сигналы слоя на втором шаге по времени

Ai2 = [Ai(:,2:end) A1];

[A2,N2,LWZ2,IWZ2,BZ2] = calca1(net,Pd(:,:,2),Ai2,1)


A2 =

[3x1 double]

N2 =

[3x1 double]

LWZ2 =

[3x1 double]

IWZ2 =

[3x1 double]

BZ2 =

[3x1 double]