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

Вид материалаДокументы
C428. getx
C428. setx
C429. calcperf
C430. calcgx
Подобный материал:
1   ...   25   26   27   28   29   30   31   32   33

C428. GETX


Создадим однослойную сеть с тремя нейронами и двухэлементным вектором входа со значениями из диапазонов [0 1] и [-1 1]:

net = newff([0 1; -1 1],[3]); gensim(net)

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

net.iw{1,1}, net.b{1}


ans =

-1.0809 -2.3639

4.7917 -0.3739

-1.9788 -2.2138

ans =

2.9653

-2.3959

-1.4355

Эти же значения можно вывести в виде объединенного вектора, который содержится в описании нейронной сети:

x = getx(net); x'


ans =

Columns 1 through 4

-1.0809 4.7917 -1.9788 -2.3639

Columns 5 through 8

-0.3739 -2.2138 2.9653 -2.3959

Column 9

-1.4355

C428. SETX


Создадим однослойную сеть с тремя нейронами и двухэлементным вектором входа со значениями из диапазонов [0 1] и [-1 1]:

net = newff([0 1; -1 1],[3]); gensim(net)

net.iw, net.b


ans =

[3x2 double]

ans =

[3x1 double]

Сеть имеет 6 весовых коэффициентов и 3 элемента смещений, то есть всего 9 значений. Зададим этим элементам случайные значения и включим их в описание нейронной сети:

net = setx(net,rand(9,1));

Эти значения можно вывести на экран с помощью команды

getx(net)

ans =

0.6252

0.7334

0.3759

0.0099

0.4199

0.7537

0.7939

0.9200

0.8447

C429. CALCPERF


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

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

net.layerConnect(1,1) = 1;

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

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

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

Pd = calcpd(net,5,1,Pc);

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

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

Tl = {[0.1;0.2] [0.3;0.1], [0.5;0.6] [0.8;0.9], [0.5;0.1]};

Извлечем объединенный вектор весов и смещений из описания сети

X = getx(net);

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

[perf,El,Ac,N,BZ,IWZ,LWZ] = calcperf(net,X,Pd,Tl,Ai,1,5);

Выведем значения функционала качества и массива ошибок слоя

perf, cat(2, El{:})

perf =

0.2470

ans =

Columns 1 through 4

0.1000 0.3000 0.5000 0.8000

0.2000 0.1000 0.6000 0.9000

Column 5

0.5000

0.1000

C430. CALCGX


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

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

net.layerConnect(1,1) = 1;

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

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

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

Pd = calcpd(net,5,1,Pc);

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

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

Tl = {[0.1;0.2] [0.3;0.1], [0.5;0.6] [0.8;0.9], [0.5;0.1]};

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

X = getx(net);

[perf,El,Ac,N,BZ,IWZ,LWZ] = calcperf(net,X,Pd,Tl,Ai,1,5);

В заключение используем функцию calcgx, чтобы вычислить градиент функционала по объединенному вектору весов и смещений:

[gX,normgX] = calcgx(net,X,Pd,BZ,IWZ,LWZ,N,Ac,El,perf,1,5); gX'

ans =

Columns 1 through 4

0.1720 0.1540 0.0600 0.0420

Columns 5 through 8

0.0780 0.0800 0.0120 0.0240

Columns 9 through 12

0.0100 0.0200 0.0460 0.0320

Columns 13 through 16

0.0320 0.0140 0.4400 0.3800

normgX

normgX =

0.6440