回歸預(yù)測(cè) | MATLAB實(shí)現(xiàn)GRU(門控循環(huán)單元)多輸入單輸出(不調(diào)用工具箱函數(shù))
預(yù)測(cè)效果
基本介紹
GRU神經(jīng)網(wǎng)絡(luò)是LSTM神經(jīng)網(wǎng)絡(luò)的一種變體,LSTM 神經(jīng)網(wǎng)
絡(luò)是在RNN的基礎(chǔ)上發(fā)展起來的。RNN是一種成熟的機(jī)器學(xué)習(xí)方法,在處理時(shí)序數(shù)列方面具有著很大優(yōu)勢(shì)。RNN中包含信號(hào)反饋結(jié)構(gòu),能將t時(shí)刻的輸出信息與t時(shí)刻之前的信息相關(guān)聯(lián),具有動(dòng)態(tài)特征和記憶功能。文章來源:http://www.zghlxwxcb.cn/news/detail-592613.html
- RNN結(jié)構(gòu)包括輸入層、隱藏層和輸出層,其中隱藏層包含反饋結(jié)構(gòu);
- t時(shí)刻的輸出值是該時(shí)刻及其之前時(shí)刻的輸入信息共同作用的結(jié)果;
- RNN能夠有效地分析和處理較短的時(shí)序數(shù)列,但不能分析和處理維
度過長(zhǎng)的時(shí)序數(shù)列,否則會(huì)產(chǎn)生“梯度消失”或“梯度爆炸”的現(xiàn)象。 - 針對(duì)這一問題,H等提出了一種RNN改進(jìn)結(jié)構(gòu)LSTM神經(jīng)網(wǎng)絡(luò),其隱藏層結(jié)構(gòu)如圖示。
- LSTM神經(jīng)網(wǎng)絡(luò)基于隱藏層中的記憶單元(遺忘門、輸入門和輸出門)實(shí)現(xiàn)時(shí)序上的記憶可控,改善了RNN長(zhǎng)期記憶力不足的問題,但其隱藏層的結(jié)構(gòu)過于復(fù)雜,樣本訓(xùn)練需要花費(fèi)大量的時(shí)間。
- 基于LSTM神經(jīng)網(wǎng)絡(luò),cho等提出了GRU神經(jīng)網(wǎng)絡(luò),利用重置門和更新門代替LSTM神經(jīng)網(wǎng)絡(luò)中的遺忘門、輸入門和輸出門。LSTM神經(jīng)網(wǎng)絡(luò)和GRU神經(jīng)網(wǎng)絡(luò)在隱藏層內(nèi)具有相似的數(shù)據(jù)流,但GRU神經(jīng)網(wǎng)絡(luò)中沒有單獨(dú)的存儲(chǔ)單元,因此樣本訓(xùn)練效率更高。
- GRU神經(jīng)網(wǎng)絡(luò)的隱藏層結(jié)構(gòu)示意圖。由圖可見:更新門控制前一時(shí)刻的信息對(duì)當(dāng)前時(shí)刻的影響程度,更新門的值越大,前一時(shí)刻的信息對(duì)當(dāng)
前時(shí)刻的影響越小;重置門控制對(duì)前一時(shí)刻信息的接收百分比,重置門的值越大,對(duì)前一時(shí)刻的信息接收的越多。
程序設(shè)計(jì)
- 完整源碼和數(shù)據(jù)獲取方式1:私信博主回復(fù)** MATLAB實(shí)現(xiàn)GRU(門控循環(huán)單元)多輸入單輸出(不調(diào)用工具箱函數(shù))**獲取。
- 完整源碼和數(shù)據(jù)獲取方式2(資源處下載):MATLAB實(shí)現(xiàn)GRU(門控循環(huán)單元)多輸入單輸出(不調(diào)用工具箱函數(shù))。
%% 清空環(huán)境變量
warning off % 關(guān)閉報(bào)警信息
close all % 關(guān)閉開啟的圖窗
clear % 清空變量
clc % 清空命令行
%-------------------------------------------------------------------------------------
%% 導(dǎo)入數(shù)據(jù)
res = xlsread('data.xlsx');
%% 劃分訓(xùn)練集和測(cè)試集
temp = randperm(103);
P_train = res(temp(1: 80), 1: 7)';
T_train = res(temp(1: 80), 8)';
M = size(P_train, 2);
%-------------------------------------------------------------------------------------
P_test = res(temp(81: end), 1: 7)';
T_test = res(temp(81: end), 8)';
N = size(P_test, 2);
%-------------------------------------------------------------------------------------
%% 數(shù)據(jù)歸一化
[P_train, ps_input] = mapminmax(P_train, 0, 1);
P_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
% MAE
mae1 = sum(abs(T_sim1' - T_train)) ./ M ;
mae2 = sum(abs(T_sim2' - T_test )) ./ N ;
disp(['訓(xùn)練集數(shù)據(jù)的MAE為:', num2str(mae1)])
disp(['測(cè)試集數(shù)據(jù)的MAE為:', num2str(mae2)])
% MBE
mbe1 = sum(T_sim1' - T_train) ./ M ;
mbe2 = sum(T_sim2' - T_test ) ./ N ;
disp(['訓(xùn)練集數(shù)據(jù)的MBE為:', num2str(mbe1)])
disp(['測(cè)試集數(shù)據(jù)的MBE為:', num2str(mbe2)])
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/129252252
[2] https://blog.csdn.net/kjm13182345320/article/details/128172453文章來源地址http://www.zghlxwxcb.cn/news/detail-592613.html
到了這里,關(guān)于回歸預(yù)測(cè) | MATLAB實(shí)現(xiàn)GRU(門控循環(huán)單元)多輸入單輸出(不調(diào)用工具箱函數(shù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!