時序預測 | MATLAB實現BO-CNN-GRU貝葉斯優(yōu)化卷積門控循環(huán)單元時間序列預測
效果一覽
基本介紹
基于貝葉斯(bayes)優(yōu)化卷積神經網絡-門控循環(huán)單元(CNN-GRU)時間序列預測,BO-CNN-GRU/Bayes-CNN-GRU時間序列預測模型?;谪惾~斯算法(bayes)優(yōu)化卷積神經網絡-門控循環(huán)單元(CNN-GRU)時間序列預測,單列數據集.
1.優(yōu)化參數為:學習率,隱含層節(jié)點,正則化參數。
2.評價指標包括:R2、MAE、MSE、RMSE和MAPE等,方便學習和替換數據。
3.運行環(huán)境matlab2020b及以上。
模型描述
-
CNN 是通過模仿生物視覺感知機制構建而成,能夠進行有監(jiān)督學習和無監(jiān)督學習。隱含層的卷積核參數共享以及層間連接的稀疏性使得CNN 能夠以較小的計算量從高維數據中提取深層次局部特征,并通過卷積層和池化層獲得有效的表示。CNN 網絡的結構包含兩個卷積層和一個展平操作,每個卷積層包含一個卷積操作和一個池化操作。第二次池化操作后,再利用全連接層將高維數據展平為一維數據,從而更加方便的對數據進行處理。
-
當時間步數較大時,RNN 的歷史梯度信息無法一直維持在一個合理的范圍內,因此梯度衰減或爆炸幾乎是不可避免的,從而導致RNN 將很難從長距離序列中捕捉到有效信息。LSTM 作為一種特殊的RNN,它的提出很好的解決了RNN 中梯度消失的問題。而GRU 則是在LSTM 的基礎上提出的,其結構更簡單,參數更少,訓練時間短,訓練速度也比LSTM更快。
-
為使模型具有自動提取特征的功能,一般采用深度學習的方法來進行構建。其中,CNN 在提取特征這方面能力較強,它通常依靠卷積核來對特征進行提取。但是,卷積核的存在又限制了CNN 在處理時間序列數據時的長期依賴性問題。
-
在這項研究中,GRU 的引入可以有效地解決這個問題,并且我們可以捕獲時間序列前后的依賴關系。另一方面, GRU 模塊的目的是捕獲長期依賴關系,它可以通過存儲單元長時間學習歷史數據中的有用信息,無用的信息將被遺忘門遺忘。另外,直接用原始特征進行處理,會極大的占用模型的算力,從而降低模型的預測精度,CNN-GRU模型結合了CNN和GRU的優(yōu)點。
-
通常,在模型訓練過程中需要對超參數進行優(yōu)化,為模型選擇一組最優(yōu)的超參數,以提高預測的性能和有效性。 憑經驗設置超參數會使最終確定的模型超參數組合不一定是最優(yōu)的,這會影響模型網絡的擬合程度及其對測試數據的泛化能力。
-
偽代碼
-
通過調整優(yōu)化算法調整模型參數,學習重復率和貝葉斯優(yōu)化超參數來調整模型參數。文章來源:http://www.zghlxwxcb.cn/news/detail-430115.html
程序設計
- 完整程序和數據獲取方式1:私信博主,同等價值程序兌換;
- 完整程序和數據下載方式2(資源處直接下載):MATLAB實現BO-CNN-GRU貝葉斯優(yōu)化卷積門控循環(huán)單元時間序列預測
- 完整程序和數據下載方式3(訂閱《組合優(yōu)化》專欄,同時獲取《組合優(yōu)化》專欄收錄的所有程序,數據訂閱后私信我獲取):MATLAB實現BO-CNN-GRU貝葉斯優(yōu)化卷積門控循環(huán)單元時間序列預測
%% 優(yōu)化算法參數設置
%參數取值上界(學習率,隱藏層節(jié)點,正則化系數)
%% 貝葉斯優(yōu)化參數范圍
optimVars = [
optimizableVariable('NumOfUnits', [10, 50], 'Type', 'integer')
optimizableVariable('InitialLearnRate', [1e-3, 1], 'Transform', 'log')
optimizableVariable('L2Regularization', [1e-10, 1e-2], 'Transform', 'log')];
%% 貝葉斯優(yōu)化網絡參數
BayesObject = bayesopt(fitness, optimVars, ... % 優(yōu)化函數,和參數范圍
'MaxTime', Inf, ... % 優(yōu)化時間(不限制)
'IsObjectiveDeterministic', false, ...
'MaxObjectiveEvaluations', 10, ... % 最大迭代次數
'Verbose', 1, ... % 顯示優(yōu)化過程
'UseParallel', false);
%% 創(chuàng)建混合CNN-GRU網絡架構
% 創(chuàng)建"CNN-GRU"模型
layers = [...
% 輸入特征
sequenceInputLayer([numFeatures 1 1],'Name','input')
sequenceFoldingLayer('Name','fold')
% CNN特征提取
convolution2dLayer([FiltZise 1],32,'Padding','same','WeightsInitializer','he','Name','conv','DilationFactor',1);
batchNormalizationLayer('Name','bn')
eluLayer('Name','elu')
averagePooling2dLayer(1,'Stride',FiltZise,'Name','pool1')
% 展開層
sequenceUnfoldingLayer('Name','unfold')
% 平滑層
flattenLayer('Name','flatten')
% GRU特征學習
gruLayer(50,'Name','gru1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% GRU輸出
gruLayer(NumOfUnits,'OutputMode',"last",'Name','bil4','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
dropoutLayer(0.25,'Name','drop3')
% 全連接層
fullyConnectedLayer(numResponses,'Name','fc')
regressionLayer('Name','output') ];
layers = layerGraph(layers);
layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/129036772?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128690229文章來源地址http://www.zghlxwxcb.cn/news/detail-430115.html
到了這里,關于時序預測 | MATLAB實現BO-CNN-GRU貝葉斯優(yōu)化卷積門控循環(huán)單元時間序列預測的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!