天天看點

【MLPs+ESN】利用多層感覺機MLPs對經典ESN(回聲狀态網絡)的輸出權值計算進行優化的MATLAB仿真

單獨的ESN仿真:

        ESN的運作結果如下所示:

【MLPs+ESN】利用多層感覺機MLPs對經典ESN(回聲狀态網絡)的輸出權值計算進行優化的MATLAB仿真

         這個部分的誤差為:

         0.0435

         ESN部分就不多做介紹了,你應該了解的,下面我們對ESN和BP改進和極限學習改進分别進行修改和說明,并進行仿真。

ESN+BP的仿真:

        首先,在原始的ESN中,權值的計算是通過pseudoinverse.m這個函數進行計算的,其主要内容就是:

【MLPs+ESN】利用多層感覺機MLPs對經典ESN(回聲狀态網絡)的輸出權值計算進行優化的MATLAB仿真

即:

【MLPs+ESN】利用多層感覺機MLPs對經典ESN(回聲狀态網絡)的輸出權值計算進行優化的MATLAB仿真

        這裡,我們的主要方法為:

        将

【MLPs+ESN】利用多層感覺機MLPs對經典ESN(回聲狀态網絡)的輸出權值計算進行優化的MATLAB仿真

計算得到的權值作為bp神經網絡疊代的初始值,然後以這個初始值為疊代過程的第一個值,不斷的訓練疊代,最後得到ESN-BP輸出的權值,然後進行測試。

         是以,其基本思路就是通過B-1T得到初始權值,然後通過bp網絡進行疊代,得到最後優化後的值。

【MLPs+ESN】利用多層感覺機MLPs對經典ESN(回聲狀态網絡)的輸出權值計算進行優化的MATLAB仿真

 計算後的誤差為0.0427

        從上面的對比可知,采用BP神經網絡進行權值系數的非線性更新之後,其誤差可以進一步降低。但提升性能有限。

ESN+極限學習算法的仿真:

        這個部分的原理和上面的相同,不同的是,我們需要使用極限學習方法對ESN網絡的中的權值進行更新。

【MLPs+ESN】利用多層感覺機MLPs對經典ESN(回聲狀态網絡)的輸出權值計算進行優化的MATLAB仿真

 誤差為:0.1050

下面給出整個算法的流程框圖:

【MLPs+ESN】利用多層感覺機MLPs對經典ESN(回聲狀态網絡)的輸出權值計算進行優化的MATLAB仿真

2.部分核心代碼 

clc;
clear; 
close all;
warning off;
RandStream.setDefaultStream(RandStream('mt19937ar','seed',1));
addpath 'func\data_process\'
addpath 'func\Initial_ESN\'
addpath 'func\train_esn\'
addpath 'func\test_esn\'
 
load data.mat
%資料分割
train_fraction                           = 0.5;
[trainInputSequence, testInputSequence]  = split_train_test(inputSequence,train_fraction);
[trainOutputSequence,testOutputSequence] = split_train_test(outputSequence,train_fraction);

%generate an esn 
nInputUnits          = 2; 
nInternalUnits       = 32; 
nOutputUnits         = 1; 
esn                  = generate_esn(nInputUnits,nInternalUnits,nOutputUnits,'spectralRadius',0.5,'inputScaling',[0.1;0.1],'inputShift',[0;0],'teacherScaling',[0.3],'teacherShift',[-0.2],'feedbackScaling',0,'type','plain_esn'); 
esn.internalWeights  = esn.spectralRadius * esn.internalWeights_UnitSR;

%train the ESN
%discard the first 100 points
nForgetPoints        = 100; 
%這裡,就固定設定一種預設的學習方式,其他的就注釋掉了
[trainedEsn,stateMatrix] = train_esn(trainInputSequence,trainOutputSequence,esn,nForgetPoints) ; 

%test the ESN
nForgetPoints        = 100 ; 
predictedTrainOutput = test_esn(trainInputSequence, trainedEsn, nForgetPoints);
predictedTestOutput  = test_esn(testInputSequence,  trainedEsn, nForgetPoints) ; 

figure;
plot(testOutputSequence(nForgetPoints+4:end),'b');
hold on
plot(predictedTestOutput,'r');
legend('原資料','預測資料');
title('ESN-ELM:測試資料的預測');


%計算測試資料的預測結果:
estimatedOutput = predictedTestOutput(1:end-3);
correctOutput   = testOutputSequence(nForgetPoints+4:end);

nEstimatePoints = length(estimatedOutput) ; 
nForgetPoints   = length(correctOutput) - nEstimatePoints ;  
correctVariance = 1;
meanerror       = sum((estimatedOutput - correctOutput).^2)/nEstimatePoints ; 
err             =(sqrt(meanerror./correctVariance));
err

           

3.參考文獻

A05-22

繼續閱讀