днепропетровск кондиционеры. Подбор по характеристикам и цене только для Вас
 
 
MyKod Информатика Лекции Нейронные сети. Часть 7. Лекции

Авторизация







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

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

C175. Сети Элмана.

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

Далее рассматриваются выборки из набора двух синусоид с амплитудами 1.0 и 2.0:

p1 = sin(1:20);

p2 = sin(1:20)*2;  

Целевыми выходами такой сети являются векторы

t1 = ones(1,20);

t2 = ones(1,20)*2;  

Сформируем набор векторов входа и целевых выходов

p = [p1 p2 p1 p2];t = [t1 t2 t1 t2];  

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

Pseq = con2seq(p);Tseq = con2seq(t);  

Создание сети

Для создания сети Элмана предназначена М-функция newelm. Решаемая задача требует, чтобы сеть Элмана на каждом шаге наблюдения значений выборки могла выявить единственный ее параметр – амплитуду синусоиды. Это означает, что сеть должна иметь один вход и один выход:

R = 1; % Число элементов входа

S2 = 1;% Число нейронов выходного слоя  

Рекуррентный слой может иметь любое число нейронов и чем сложнее задача, тем большее количество нейронов требуется. Остановимся на 10 нейронах рекуррентного слоя

S1 = 10;% Число нейронов рекуррентного слоя  

Элементы входа для данной задачи изменяются в диапазоне от-2 до 2. Для обучения используется метод градиентного спуска с возмущением и адаптацией параметра скорости настройки, реализованный в виде М-функции traingdx

net = newelm([-2 2],[S1 S2],{'tansig','purelin'},'traingdx');

gensim(net)  

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

Для обучения сети Элмана используется М-функция train. Ее входными аргументами являются обучающие последовательности Pseq и Tseq, в качестве метода обучения используется метод обратного распространения ошибки с возмущением и адаптацией параметра скорости настройки. Количество циклов обучения принимается равным 1000, периодичность вывода результатов –20 циклов, конечная погрешность обучения 0.01:

net.trainParam.epochs = 1000;net.trainParam.show = 25;net.trainParam.goal = 0.01;[net,tr] = train(net,Pseq,Tseq);  TRAINGDX, Epoch 0/1000, MSE 5.54748/0.01, Gradient 9.68599/1e-006TRAINGDX, Epoch 25/1000, MSE 0.351376/0.01, Gradient 0.603403/1e-006TRAINGDX, Epoch 50/1000, MSE 0.272563/0.01, Gradient 0.127855/1e-006TRAINGDX, Epoch 75/1000, MSE 0.250764/0.01, Gradient 0.0547544/1e-006TRAINGDX, Epoch 100/1000, MSE 0.238683/0.01, Gradient 0.0289263/1e-006TRAINGDX, Epoch 125/1000, MSE 0.22393/0.01, Gradient 0.364115/1e-006TRAINGDX, Epoch 150/1000, MSE 0.220146/0.01, Gradient 0.185611/1e-006TRAINGDX, Epoch 175/1000, MSE 0.217272/0.01, Gradient 0.0602147/1e-006TRAINGDX, Epoch 200/1000, MSE 0.15495/0.01, Gradient 0.184134/1e-006TRAINGDX, Epoch 225/1000, MSE 0.113434/0.01, Gradient 0.200365/1e-006TRAINGDX, Epoch 250/1000, MSE 0.0604263/0.01, Gradient 0.08513/1e-006TRAINGDX, Epoch 275/1000, MSE 0.053735/0.01, Gradient 0.135704/1e-006TRAINGDX, Epoch 300/1000, MSE 0.035034/0.01, Gradient 0.17518/1e-006TRAINGDX, Epoch 325/1000, MSE 0.0297003/0.01, Gradient 0.0846544/1e-006TRAINGDX, Epoch 350/1000, MSE 0.024135/0.01, Gradient 0.0646931/1e-006TRAINGDX, Epoch 375/1000, MSE 0.0234717/0.01, Gradient 0.048488/1e-006TRAINGDX, Epoch 400/1000, MSE 0.0345563/0.01, Gradient 0.101825/1e-006TRAINGDX, Epoch 425/1000, MSE 0.0565671/0.01, Gradient 0.298326/1e-006TRAINGDX, Epoch 450/1000, MSE 0.0483179/0.01, Gradient 0.0997117/1e-006TRAINGDX, Epoch 475/1000, MSE 0.0466496/0.01, Gradient 0.0843978/1e-006TRAINGDX, Epoch 500/1000, MSE 0.0450599/0.01, Gradient 0.0702556/1e-006TRAINGDX, Epoch 525/1000, MSE 0.0412523/0.01, Gradient 0.0507589/1e-006TRAINGDX, Epoch 550/1000, MSE 0.0362202/0.01, Gradient 0.0372358/1e-006TRAINGDX, Epoch 575/1000, MSE 0.0300758/0.01, Gradient 0.0201178/1e-006TRAINGDX, Epoch 600/1000, MSE 0.0260255/0.01, Gradient 0.214156/1e-006TRAINGDX, Epoch 625/1000, MSE 0.0251267/0.01, Gradient 0.128905/1e-006TRAINGDX, Epoch 650/1000, MSE 0.0245318/0.01, Gradient 0.0354351/1e-006TRAINGDX, Epoch 675/1000, MSE 0.0239542/0.01, Gradient 0.0166466/1e-006TRAINGDX, Epoch 700/1000, MSE 0.0224075/0.01, Gradient 0.0146542/1e-006TRAINGDX, Epoch 725/1000, MSE 0.0209583/0.01, Gradient 0.18643/1e-006TRAINGDX, Epoch 750/1000, MSE 0.0199925/0.01, Gradient 0.045114/1e-006TRAINGDX, Epoch 775/1000, MSE 0.0197382/0.01, Gradient 0.020261/1e-006TRAINGDX, Epoch 800/1000, MSE 0.0191773/0.01, Gradient 0.0131769/1e-006TRAINGDX, Epoch 825/1000, MSE 0.0175978/0.01, Gradient 0.012473/1e-006TRAINGDX, Epoch 850/1000, MSE 0.0174953/0.01, Gradient 0.123555/1e-006TRAINGDX, Epoch 875/1000, MSE 0.017082/0.01, Gradient 0.043115/1e-006TRAINGDX, Epoch 900/1000, MSE 0.0168296/0.01, Gradient 0.0103317/1e-006TRAINGDX, Epoch 925/1000, MSE 0.0162647/0.01, Gradient 0.00979225/1e-006TRAINGDX, Epoch 950/1000, MSE 0.0161786/0.01, Gradient 0.134446/1e-006TRAINGDX, Epoch 975/1000, MSE 0.0158085/0.01, Gradient 0.0564908/1e-006TRAINGDX, Epoch 1000/1000, MSE 0.0157046/0.01, Gradient 0.0103259/1e-006TRAINGDX, Maximum epoch reached, performance goal was not met.  

Проверка сети

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

figure(2)a = sim(net,Pseq);time = 1:length(p);plot(time, t, '--', time, cat(2,a{:}))

axis([1 80 0.8 2.2]), grid on %Рис.8.3  

Обладает ли построенная сеть Элмана свойством обобщения? Попробуем проверить это, выполнив следующие исследования.

Подадим на сеть набор сигналов, составленный из двух синусоид с амплитудами 1.6 и 1.2, соответственно

p3 = sin(1:20)*1.6;t3 = ones(1,20)*1.6;p4 = sin(1:20)*1.2;t4 = ones(1,20)*1.2;pg = [p3 p4 p3 p4];tg = [t3 t4 t3 t4];pgseq = con2seq(pg);figure(3)a = sim(net,pgseq);time = 1:length(pg);plot(time, tg, '--', time, cat(2,a{:}))axis([1 80 0.8 2.2]) %Рис.8.4grid on  C181. Сети Хопфилда.

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

T = [-1 -1 1; 1 -1 1]'  

T =    -1     1    -1    -1

     1     1  

Синтез сети

Выполним синтез сети, используя М-функцию newhop

net = newhop(T);gensim(net)  

Удостоверимся, что разработанная сеть имеет устойчивые состояния в этих двух точках. Выполним моделирование сети Хопфилда, приняв во внимание, что эта сеть не имеет входов и содержит рекуррентный слой; в этом случае целевые векторы определяют начальное состояние слоя Ai, а второй аргумент функции sim определяется числом целевых векторов

Ai = T;[Y,Pf,Af] = sim(net,2,[],Ai); Y  С186. Пример.

Рассмотрим сеть Хопфилда с четырьмя нейронами и определим 4 точки равновесия в виде следующего массива целевых векторов

T = [1 -1; -1 1;  1 1; -1 -1]'  

T =     1    -1     1    -1

    -1     1     1    -1  

На рис. показаны эти 4 точки равновесия на плоскости состояний сети Хопфилда

figure(1), clf, plot(T(1,:), T(2,:),'*r') %Рис.8.7axis([-1.1 1.1 -1.1 1.1])title('Точки равновесиЯ сети Хопфилда')xlabel('a(1)'), ylabel('a(2)')  Рассчитаем веса и смещения модифицированной сети Хопфилда, использую М-функцию newhopnet = newhop(T);W= net.LW{1,1}

b = net.b{1,1}  

W =    1.1618         0         0    1.1618b =  1.0e-016 *         0

   -0.1797  

Проверим, принадлежат ли вершины квадрата сети Хопфилда:

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

    -1     1     1    -1  

Как и следовало ожидать, выходы сети равны целевым векторам.

Теперь проверим поведение сети при случайных начальных условиях.

 figure(1), clf, plot(T(1,:), T(2,:),'*r', 0,0,'rh'), hold on, axis([-1.1 1.1 -1.1 1.1])xlabel('a(1)'), ylabel('a(2)')new = newhop(T);[Y,Pf,Af] = sim(net,4,[],T); for i =1:20   a = {rands(2,1)};   [Y,Pf,Af] = sim(net,{1,20},{},a);    record = [cell2mat(a) cell2mat(Y)];   start = cell2mat(a);   plot(start(1,1),start(2,1),'kx',record(1,:),record(2,:))

end