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

Вид материалаДокументы
C334. trainc
C337. trainr
С344. traingd
С346. traingda
Подобный материал:
1   ...   14   15   16   17   18   19   20   21   ...   33

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/100

TRAINC, Epoch 3/100

TRAINC, Performance goal met.

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

Y = sim(net, P)


Y =

0 1 0 1

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

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


ans =

-2 -3

ans =

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/100

TRAINR, Epoch 25/100

TRAINR, Epoch 50/100

TRAINR, Epoch 75/100

TRAINR, Epoch 100/100

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

TRAINGD, Epoch 50/1000, MSE 0.0151675/0.01, Gradient 0.0305964/1e-010

TRAINGD, Epoch 100/1000, MSE 0.0147153/0.01, Gradient 0.0295528/1e-010

TRAINGD, Epoch 150/1000, MSE 0.0142928/0.01, Gradient 0.0285863/1e-010

TRAINGD, Epoch 200/1000, MSE 0.0138969/0.01, Gradient 0.0276881/1e-010

TRAINGD, Epoch 250/1000, MSE 0.0135251/0.01, Gradient 0.026851/1e-010

TRAINGD, Epoch 300/1000, MSE 0.013175/0.01, Gradient 0.0260685/1e-010

TRAINGD, Epoch 350/1000, MSE 0.0128447/0.01, Gradient 0.0253352/1e-010

TRAINGD, Epoch 400/1000, MSE 0.0125324/0.01, Gradient 0.0246461/1e-010

TRAINGD, Epoch 450/1000, MSE 0.0122366/0.01, Gradient 0.0239972/1e-010

TRAINGD, Epoch 500/1000, MSE 0.011956/0.01, Gradient 0.0233848/1e-010

TRAINGD, Epoch 550/1000, MSE 0.0116892/0.01, Gradient 0.0228057/1e-010

TRAINGD, Epoch 600/1000, MSE 0.0114354/0.01, Gradient 0.022257/1e-010

TRAINGD, Epoch 650/1000, MSE 0.0111935/0.01, Gradient 0.0217363/1e-010

TRAINGD, Epoch 700/1000, MSE 0.0109625/0.01, Gradient 0.0212413/1e-010

TRAINGD, Epoch 750/1000, MSE 0.0107419/0.01, Gradient 0.0207702/1e-010

TRAINGD, Epoch 800/1000, MSE 0.0105308/0.01, Gradient 0.020321/1e-010

TRAINGD, Epoch 850/1000, MSE 0.0103287/0.01, Gradient 0.0198922/1e-010

TRAINGD, Epoch 900/1000, MSE 0.0101349/0.01, Gradient 0.0194824/1e-010

TRAINGD, Epoch 937/1000, MSE 0.0099965/0.01, Gradient 0.0191906/1e-010

TRAINGD, 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-006

TRAINGDA, Epoch 25/500, MSE 0.419751/0.01, Gradient 0.143599/1e-006

TRAINGDA, Epoch 50/500, MSE 0.379232/0.01, Gradient 0.169519/1e-006

TRAINGDA, Epoch 75/500, MSE 0.0778148/0.01, Gradient 0.110517/1e-006

TRAINGDA, Epoch 100/500, MSE 0.033615/0.01, Gradient 0.0718189/1e-006

TRAINGDA, Epoch 125/500, MSE 0.0209789/0.01, Gradient 0.074307/1e-006

TRAINGDA, Epoch 150/500, MSE 0.0141581/0.01, Gradient 0.0685576/1e-006

TRAINGDA, 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 on

title('Параметр скорости настройки')

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