日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

回归预测 基于ELMAN递归神经网络预测及其matlab代码实现

發(fā)布時(shí)間:2023/12/9 循环神经网络 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回归预测 基于ELMAN递归神经网络预测及其matlab代码实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1. ELMAN神經(jīng)網(wǎng)絡(luò)的簡介和算法描述
    • 1.1 Elman網(wǎng)絡(luò)介紹
    • 1.2 Elman結(jié)構(gòu)組成
  • 1.3 ELMAN訓(xùn)練界面的參數(shù)解讀
  • 2. 建立ELMAN神經(jīng)網(wǎng)絡(luò)的步驟
  • 3. 編寫MATLAB代碼
  • 4. ELMAN程序運(yùn)行結(jié)果
    • 4.1 各層的神經(jīng)元個(gè)數(shù)的確定過程
    • 4.2 預(yù)測值和真實(shí)值的誤差計(jì)算(SSE、MAE、MSE、RMSE、MAPE)
    • 4.3 Elman網(wǎng)絡(luò)預(yù)測的分析圖像
  • 5. 小結(jié)
  • 6. MATLAB代碼與數(shù)據(jù)下載地址

1. ELMAN神經(jīng)網(wǎng)絡(luò)的簡介和算法描述

1.1 Elman網(wǎng)絡(luò)介紹

神經(jīng)網(wǎng)絡(luò)是一個(gè)龐大的體系和概念,根據(jù)處理信息的不同方式來區(qū)分不同的network。比如根據(jù)處理信息結(jié)果的傳遞方向,分前饋型與反饋型。前饋型網(wǎng)絡(luò)會(huì)根據(jù)輸出數(shù)值來調(diào)整網(wǎng)絡(luò)的參數(shù),反饋型網(wǎng)絡(luò)的輸入會(huì)存在輸入或者輸出數(shù)值的反饋,可以對運(yùn)算處理過程不斷地進(jìn)行優(yōu)化。網(wǎng)絡(luò)的反饋形式?jīng)Q定了網(wǎng)絡(luò)的動(dòng)態(tài)運(yùn)算特點(diǎn),遞歸神經(jīng)網(wǎng)絡(luò)ELMAN和前面所介紹的三層BP神經(jīng)網(wǎng)絡(luò)相比,增加了一個(gè)承接層,可以理解成延時(shí)算子,作用是讓網(wǎng)絡(luò)存在記憶功能,更好地適應(yīng)數(shù)據(jù)輸入的動(dòng)態(tài)變化。

1.2 Elman結(jié)構(gòu)組成

ELMAN的構(gòu)造分為四層神經(jīng)元:輸入層、隱含層、承接層以及輸出層(在使用智能算法優(yōu)化ELMAN的參數(shù)時(shí),理解ELMAN的結(jié)構(gòu)將有所幫助)。

a). 輸入層、輸出層的神經(jīng)元節(jié)點(diǎn)個(gè)數(shù):
輸入層的神經(jīng)元數(shù)量與輸入數(shù)據(jù)特征的維數(shù)是相等的,輸出層的神經(jīng)元節(jié)點(diǎn)數(shù)量也等同于輸出數(shù)據(jù)標(biāo)簽的維度,這與BP神經(jīng)網(wǎng)絡(luò)一樣。

b). 隱含層的神經(jīng)元節(jié)點(diǎn)個(gè)數(shù):
不管在BP還是ELMAN,或者其他的神經(jīng)網(wǎng)絡(luò),隱含層的神經(jīng)元個(gè)數(shù)都不是固定的。如果選擇的隱含層神經(jīng)元個(gè)數(shù)較少時(shí),就會(huì)導(dǎo)致網(wǎng)絡(luò)的學(xué)習(xí)程度減小甚至無法學(xué)習(xí)。節(jié)點(diǎn)個(gè)數(shù)較多時(shí),則會(huì)導(dǎo)致網(wǎng)絡(luò)訓(xùn)練的過程變慢,也很難得出預(yù)計(jì)的情況。只有當(dāng)隱含層神經(jīng)元數(shù)量只有控制在一個(gè)合理的范圍內(nèi),才能使得網(wǎng)絡(luò)模型好的進(jìn)行學(xué)習(xí)運(yùn)算。
通常的做法是根據(jù)以下公式來推出隱含層節(jié)點(diǎn)數(shù)目的范圍,在范圍之內(nèi)根據(jù)訓(xùn)練誤差最小(分類問題則取準(zhǔn)確率最高或者誤差率最低)的原則來確定最佳的隱含層節(jié)點(diǎn)數(shù)目。

h=m+n+ah=\sqrt{m+n}+a h=m+n?+a

式中,h為隱含層節(jié)點(diǎn)個(gè)數(shù),m為輸入層節(jié)點(diǎn)個(gè)數(shù),n為輸出層節(jié)點(diǎn)個(gè)數(shù),a一般取為1-10之間的常數(shù)。BP神經(jīng)網(wǎng)絡(luò)確定隱含層節(jié)點(diǎn)也通常采用該式。

c). 承接層的神經(jīng)元節(jié)點(diǎn)個(gè)數(shù):
承接層也叫做上下文層和狀態(tài)層,主要功能是用來記憶隱含層上一個(gè)時(shí)間點(diǎn)的輸出數(shù)值。所以承接層的神經(jīng)元個(gè)數(shù)與隱含層相同,確定方法為:先根據(jù)訓(xùn)練誤差最小確定最佳的隱含層神經(jīng)元節(jié)點(diǎn),再得到承接層的神經(jīng)元節(jié)點(diǎn)個(gè)數(shù)。

1.3 ELMAN訓(xùn)練界面的參數(shù)解讀

2. 建立ELMAN神經(jīng)網(wǎng)絡(luò)的步驟

1.讀取數(shù)據(jù)
2. 劃分訓(xùn)練集、測試集
3. 數(shù)據(jù)歸一化
4. 獲取輸入層節(jié)點(diǎn)、輸出層節(jié)點(diǎn)個(gè)數(shù)
5. 確定網(wǎng)絡(luò)層與層之間的傳遞函數(shù)和訓(xùn)練算法
6. 構(gòu)建最佳隱含層節(jié)點(diǎn)(承接層節(jié)點(diǎn))的ELMAN神經(jīng)網(wǎng)絡(luò)
7. 訓(xùn)練網(wǎng)絡(luò)
8. 網(wǎng)絡(luò)測試
9. 對ELMAN的預(yù)測值與實(shí)際值進(jìn)行誤差分析
10. 打印預(yù)測結(jié)果和誤差表格

3. 編寫MATLAB代碼

3.1 讀取數(shù)據(jù)
采用深度學(xué)習(xí)常用的建筑物能源數(shù)據(jù)集進(jìn)行預(yù)測實(shí)驗(yàn),數(shù)據(jù)是EXCEL格式,形式為:

樣本序號輸入指標(biāo)1輸入指標(biāo)2…輸出指標(biāo)
1-
2-
-
n-

EXCEL的讀取命令為(對應(yīng)EXCEL的工作簿名,工作表Sheet名,單元格范圍):

%% 讀取數(shù)據(jù) data=xlsread('數(shù)據(jù).xlsx','Sheet1','A1:N252'); %%使用xlsread函數(shù)讀取EXCEL中對應(yīng)范圍的數(shù)據(jù)即可 %輸入輸出數(shù)據(jù) input=data(:,1:end-1); %data的第一列-倒數(shù)第二列為特征指標(biāo) output=data(:,end); %data的最后面一列為輸出的指標(biāo)值

3.2 劃分訓(xùn)練集測試集
分層抽取即可,通過程序獲取樣本總數(shù)N,設(shè)置測試樣本數(shù)目testNum,訓(xùn)練樣本數(shù)為N-testNum。

N=length(output); %全部樣本數(shù)目 testNum=30; %設(shè)定測試樣本數(shù)目 trainNum=N-testNum; %計(jì)算訓(xùn)練樣本數(shù)目

3.3 數(shù)據(jù)歸一化
采用MATLAB自帶的mapminmax函數(shù),可以很方便的設(shè)置歸一化的范圍為[-1,1],[0,1]等(注意如果MATLAB安裝了LSSVM的工具包,會(huì)與mapminmax函數(shù)發(fā)生沖突,在添加的路徑中去掉LSSVM路徑即可)

%% 數(shù)據(jù)歸一化 %歸一化到0,1之間,歸一化可以消除特征指標(biāo)的量綱和數(shù)量級的影響 [inputn,inputps]=mapminmax(input_train,0,1); [outputn,outputps]=mapminmax(output_train); inputn_test=mapminmax('apply',input_test,inputps);

3.4 獲取輸入層輸出層節(jié)點(diǎn)的個(gè)數(shù)
使用size函數(shù),用法為[M,N]=size(A),M對應(yīng)A的行數(shù),N對應(yīng)A的列數(shù),size(A,1)返回的M值,size(A,2)返回的N值。指標(biāo)是列的方向,所以采用N=size(A,2)的寫法。

inputnum=size(input,2); outputnum=size(output,2);

3.5 確定網(wǎng)絡(luò)的傳遞函數(shù)與訓(xùn)練算法

string={'tansig','purelin'}; %傳遞函數(shù) func_str='traingdx'; %訓(xùn)練算法

3.6 使用循環(huán)遍歷范圍內(nèi)的隱含層節(jié)點(diǎn)與訓(xùn)練誤差情況
因?yàn)橐易钚〉恼`差,所以初始化訓(xùn)練誤差時(shí),將MSE設(shè)置較大的數(shù)字,用于在循環(huán)中確定最佳的隱含層節(jié)點(diǎn)。

%確定隱含層節(jié)點(diǎn)個(gè)數(shù) %采用經(jīng)驗(yàn)公式hiddennum=sqrt(m+n)+a,m為輸入層節(jié)點(diǎn)個(gè)數(shù) %n為輸出層節(jié)點(diǎn)個(gè)數(shù),a一般取為1-10之間的整數(shù) MSE=1e+5; %初始化訓(xùn)練誤差

3.7 訓(xùn)練網(wǎng)絡(luò)

%% 構(gòu)建最佳隱含層節(jié)點(diǎn)(承接層節(jié)點(diǎn))的ELMAN神經(jīng)網(wǎng)絡(luò) net=newelm(inputn,outputn,hiddennum_best,string,func_str);% 網(wǎng)絡(luò)參數(shù) net.trainParam.epochs=1000; % 訓(xùn)練次數(shù) net.trainParam.lr=0.01; % 學(xué)習(xí)速率 net.trainParam.goal=0.0001; % 訓(xùn)練目標(biāo)最小誤差%% 訓(xùn)練網(wǎng)絡(luò) net=train(net,inputn,outputn);

3.8 網(wǎng)絡(luò)測試與誤差分析

%% 網(wǎng)絡(luò)測試 an=sim(net,inputn_test); %用訓(xùn)練好的模型進(jìn)行仿真 test_simu=mapminmax('reverse',an,outputps); % 預(yù)測結(jié)果反歸一化%% 對ELMAN的預(yù)測值與實(shí)際值進(jìn)行誤差分析 error=test_simu-output_test; %預(yù)測值和真實(shí)值的誤差%% 計(jì)算誤差指標(biāo) SSE=sum(error.^2); %誤差平方和 MAE=sum(abs(error))/len; %平均絕對誤差 MSE=error*error'/len; %均方誤差 RMSE=MSE^(1/2); %均方誤差根 MAPE=mean(abs(error./output_test)); %平均百分比誤差

4. ELMAN程序運(yùn)行結(jié)果

4.1 各層的神經(jīng)元個(gè)數(shù)的確定過程

4.2 預(yù)測值和真實(shí)值的誤差計(jì)算(SSE、MAE、MSE、RMSE、MAPE)

4.3 Elman網(wǎng)絡(luò)預(yù)測的分析圖像

  • 預(yù)測值和真實(shí)值的對比圖像
  • 預(yù)測值與實(shí)際值的誤差圖像
  • 訓(xùn)練集、驗(yàn)證集、測試集和總體的均方誤差隨訓(xùn)練次數(shù)的變化圖像
    注:小圓圈位置代表終止的訓(xùn)練次數(shù)(即代數(shù))處的均方誤差
  • Elman各階段的訓(xùn)練圖像
    對三個(gè)圖的解釋:(1)梯度隨訓(xùn)練的進(jìn)行而發(fā)生減小,(2)在后期(149代)發(fā)生過擬合現(xiàn)象,連續(xù)6次過擬合,終止網(wǎng)絡(luò)訓(xùn)練,(3)學(xué)習(xí)速率lr隨訓(xùn)練的進(jìn)行發(fā)生變化,減小。從前面3的train、test、validation來看,三個(gè)部分的訓(xùn)練性能變化一致,在134代訓(xùn)練達(dá)到最佳的訓(xùn)練效果(performance最小為0.04517),說明訓(xùn)練是合格的。過擬合現(xiàn)象在訓(xùn)練中無法避免,MATLAB進(jìn)行Elman訓(xùn)練時(shí),默認(rèn)發(fā)生連續(xù)6次過擬合則停止訓(xùn)練,可設(shè)置過擬合連續(xù)的最大次數(shù)停止準(zhǔn)則。
  • 5. 小結(jié)

  • Elman神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)相比BP神經(jīng)網(wǎng)絡(luò)多了一個(gè)承接層,能對動(dòng)態(tài)變化的信息進(jìn)行處理。
  • 從Elman的四層結(jié)構(gòu)來看,Elman有很好的自適應(yīng)和學(xué)習(xí)能力,以及高并行度。
  • 本篇將Elman神經(jīng)網(wǎng)絡(luò)的搭建思路和關(guān)鍵代碼表述清楚,供大家參考和學(xué)習(xí)。如有問題,歡迎留言交流。
  • 若有不恰當(dāng)?shù)牡胤?#xff0c;懇請碼友指正。
  • 6. MATLAB代碼與數(shù)據(jù)下載地址

    見博客主頁

    總結(jié)

    以上是生活随笔為你收集整理的回归预测 基于ELMAN递归神经网络预测及其matlab代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。