Elman神經網絡
近期開題,閱讀到了一篇文章關于故障診斷的,其中用到了Elman神經網絡,具體是結合EMD、PCA-SOM的Elman的性能評估/預測故障診斷,對Elman神經網絡有點陌生,網上資源也講的特别雜,來做個彙總Introduction吧!
介紹
Elman神經網絡 是 J. L. Elman于1990年首先針對語音處理問題而提出來的,是一種典型的局部回歸網絡( global feed forward local recurrent)。Elman網絡可以看作是一個具有局部記憶單元和局部回報連接配接的遞歸神經網絡。
Elman網絡具有與多層前向網絡相似的多層結構。
它的主要結構是前饋連接配接, 包括輸入層、 隐含層、 輸出層, 其連接配接權可以進行學習修正;回報連接配接由一組“結構 ” 單元構成,用來記憶前一時刻的輸出值, 其連接配接權值是固定的。在這種網絡中, 除了普通的隐含層外, 還有一個特别的隐含層,稱為關聯層 (或聯系單元層 ) ;該層從隐含層接收回報信号, 每一個隐含層節點都有一個與之對應的關聯層節點連接配接。關聯層的作用是通過聯接記憶将上一個時刻的隐層狀态連同目前時刻的網絡輸入一起作為隐層的輸入, 相當于狀态回報。隐層的傳遞函數仍為某種非線性函數, 一般為 Sigmoid函數, 輸出層為線性函數, 關聯層也為線性函數。
----詞條來自于百度百科
Elman組成
Elman神經網絡是一種典型的動态神經網絡,通常有四層:輸入層、中間層(隐含層)、 承接層和輸出層。
輸入層、隐含層和輸出層的連接配接類似于前饋網絡。
輸入層的單元隻傳輸信号,輸出層的單元具有線性權重的功能。
隐層細胞的傳遞函數可以是線性函數,也可以是非線性函數。
承接層又稱為上下文層或狀态層,用于記憶隐層的前一個時間步長輸出,是以可以看作是一步時間延遲算子。
Elman網絡結構

帶回報的的BP網絡
行程遲滞具有短期記憶功能
(Figure來自于網絡)
Elman神經網絡的特點是通過受體層的延遲和存儲,隐層的輸出與隐層的輸入本身相連。這種自連接配接對其曆史狀态的資料非常敏感,内部回報網絡也增加了動态資訊處理的能力,進而達到動态模組化的目的。
選擇用曆史訓練的Elman神經網絡同步預測,資料流程圖如下圖所示。
- Elman網絡學習算法
用BP算法進行權值修正,名額函數為誤差平方和
Matlab執行個體代碼
本執行個體是引用的《Matlab神經網絡30個案例分析》中的一個,覺得很不錯,就更新一下下!~
内容較為古老,直接附上了,請多擔待。
電力負荷預測概述
模型建立
電力系統負荷資料
具體資料及其源代碼在我的GitHub上可下載下傳:
https://github.com/YurBro/Project-Code/tree/main/ElmanNNMatlab Code:
%% 基于Elman神經網絡的電力負荷預測模型研究
%
%
% <html>
% <table border="0" width="600px" id="table1"> <tr> <td><b><font size="2">該案例作者申明:</font></b></td> </tr> <tr> <td><span class="comment"><font size="2">1:本人長期駐紮在此<a target="_blank" href="http://www.ilovematlab.cn/forum-158-1.html"><font color="#0000FF">闆塊</font></a>裡,對<a target="_blank" href="http://www.ilovematlab.cn/thread-48362-1-1.html"><font color="#0000FF">該案例</font></a>提問,做到有問必答。</font></span></td></tr><tr> <td><span class="comment"><font size="2">2:此案例有配套的教學視訊,配套的完整可運作Matlab程式。</font></span></td> </tr> <tr> <td><span class="comment"><font size="2"> 3:以下内容為該案例的部分内容(約占該案例完整内容的1/10)。</font></span></td> </tr> <tr> <td><span class="comment"><font size="2"> 4:此案例為原創案例,轉載請注明出處(<a target="_blank" href="http://www.ilovematlab.cn/">Matlab中文論壇</a>,<a target="_blank" href="http://www.ilovematlab.cn/forum-158-1.html">《Matlab神經網絡30個案例分析》</a>)。</font></span></td> </tr> <tr> <td><span class="comment"><font size="2"> 5:若此案例碰巧與您的研究有關聯,我們歡迎您提意見,要求等,我們考慮後可以加在案例裡。</font></span></td> </tr> <tr> <td><span class="comment"><font size="2"> 6:您看到的以下内容為初稿,書籍的實際内容可能有少許出入,以書籍實際發行内容為準。</font></span></td> </tr><tr> <td><span class="comment"><font size="2"> 7:此書其他常見問題、預定方式等,<a target="_blank" href="http://www.ilovematlab.cn/thread-47939-1-1.html">請點選這裡</a>。</font></span></td> </tr></table>
% </html>
%
%% 清空環境變量
clc;
clear all
close all
nntwarn off;
%% 資料載入
load data;
a=data;
%% 選取訓練資料和測試資料
for i=1:6
p(i,:)=[a(i,:),a(i+1,:),a(i+2,:)];
end
% 訓練資料輸入
p_train=p(1:5,:);
% 訓練資料輸出
t_train=a(4:8,:);
% 測試資料輸入
p_test=p(6,:);
% 測試資料輸出
t_test=a(9,:);
% 為适應網絡結構 做轉置
p_train=p_train';
t_train=t_train';
p_test=p_test';
%% 網絡的建立和訓練
% 利用循環,設定不同的隐藏層神經元個數
nn=[7 11 14 18];
for i=1:4
threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];
% 建立Elman神經網絡 隐藏層為nn(i)個神經元
net=newelm(threshold,[nn(i),3],{'tansig','purelin'});
% 設定網絡訓練參數
net.trainparam.epochs=1000;
net.trainparam.show=20;
% 初始化網絡
net=init(net);
% Elman網絡訓練
net=train(net,p_train,t_train);
% 預測資料
y=sim(net,p_test);
% 計算誤差
error(i,:)=y'-t_test;
end
%% 通過作圖 觀察不同隐藏層神經元個數時,網絡的預測效果
plot(1:1:3,error(1,:),'-ro','linewidth',2);
hold on;
plot(1:1:3,error(2,:),'b:x','linewidth',2);
hold on;
plot(1:1:3,error(3,:),'k-.s','linewidth',2);
hold on;
plot(1:1:3,error(4,:),'c--d','linewidth',2);
title('Elman預測誤差圖')
set(gca,'Xtick',[1:3])
legend('7','11','14','18','location','best')
xlabel('時間點')
ylabel('誤差')
hold off;
web browser http://www.ilovematlab.cn/viewthread.php?tid=63640
%%
%
% <html>
% <table align="center" > <tr> <td align="center"><font size="2">版權所有:</font><a
% href="http://www.ilovematlab.cn/">Matlab中文論壇</a> <script
% src="http://s3.cnzz.com/stat.php?id=971931&web_id=971931&show=pic" language="JavaScript" ></script> </td> </tr></table>
% </html>
%