時序預(yù)測 | MATLAB實現(xiàn)BO-CNN-LSTM貝葉斯優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)-長短期記憶網(wǎng)絡(luò)時間序列預(yù)測
效果一覽
基本介紹
MATLAB實現(xiàn)BO-CNN-LSTM貝葉斯優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)-長短期記憶網(wǎng)絡(luò)時間序列預(yù)測?;谪惾~斯(bayes)優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)-長短期記憶網(wǎng)絡(luò)(CNN-LSTM)時間序列預(yù)測,BO-CNN-LSTM/Bayes-CNN-LSTM時間序列預(yù)測模型。
1.優(yōu)化參數(shù)為:學(xué)習(xí)率,隱含層節(jié)點,正則化參數(shù)。
2.評價指標(biāo)包括:R2、MAE、MSE、RMSE和MAPE等。
3.運行環(huán)境matlab2020b及以上。
模型搭建
- CNN-LSTM模型結(jié)合了CNN和LSTM的優(yōu)點,CNN-LSTM網(wǎng)絡(luò)模型如圖1所示,本文使用的CNN-LSTM模型的第一部分是由卷積層和最大值組成的CNN部分池化層,對原始數(shù)據(jù)進(jìn)行預(yù)處理并輸入CNN卷積層,利用卷積核自適應(yīng)提取生命特征,卷積層將遍歷輸入信息,將卷積核權(quán)重與局部序列進(jìn)行卷積運算體管信息得到初步的特征矩陣,比原始序列數(shù)據(jù)(矩陣)更具表現(xiàn)力。
- 本文使用的池化層是最大池化層,池化操作對提取的特征進(jìn)行數(shù)據(jù)降維,避免模型過擬合,保留主要特征。最大池化層將前一個卷積層得到的特征矩陣作為輸入,在這個矩陣上滑動一個池化窗口,在每一次滑動中取池化窗口的最大值,輸出一個更具表現(xiàn)力的特征矩陣。
- 池化后,連接一個 LSTM 層,提取相關(guān)向量由CNN構(gòu)造成一個長期的時間序列作為LSTM的輸入數(shù)據(jù)。卷積層將卷積層的數(shù)據(jù)展平(Flatten),模型中加入Flatten,將(height,width,channel)的數(shù)據(jù)壓縮成一個長高寬通道的一維數(shù)組,然后我們可以添加直接密集層。
- 對卷積池化數(shù)據(jù)壓縮特征操作,多個卷積特征提取框架提取的特征融合或從輸出層融合,全連接層聚合學(xué)習(xí)到的特征,激活函數(shù)使用Relu。
- 通常,在模型訓(xùn)練過程中需要對超參數(shù)進(jìn)行優(yōu)化,為模型選擇一組最優(yōu)的超參數(shù),以提高預(yù)測的性能和有效性。 憑經(jīng)驗設(shè)置超參數(shù)會使最終確定的模型超參數(shù)組合不一定是最優(yōu)的,這會影響模型網(wǎng)絡(luò)的擬合程度及其對測試數(shù)據(jù)的泛化能力。
- 偽代碼
文章來源:http://www.zghlxwxcb.cn/news/detail-431503.html
- 通過調(diào)整優(yōu)化算法調(diào)整模型參數(shù),學(xué)習(xí)重復(fù)率和貝葉斯優(yōu)化超參數(shù)來調(diào)整模型參數(shù)。
程序設(shè)計
- 完整程序和數(shù)據(jù)獲取方式1:私信博主,同等價值程序兌換;
- 完整程序和數(shù)據(jù)下載方式2(資源處直接下載):MATLAB實現(xiàn)BO-CNN-LSTM貝葉斯優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)-長短期記憶網(wǎng)絡(luò)時間序列預(yù)測
%% 優(yōu)化算法參數(shù)設(shè)置
%參數(shù)取值上界(學(xué)習(xí)率,隱藏層節(jié)點,正則化系數(shù))
%% 貝葉斯優(yōu)化參數(shù)范圍
optimVars = [
optimizableVariable('NumOfUnits', [10, 50], 'Type', 'integer')
optimizableVariable('InitialLearnRate', [1e-3, 1], 'Transform', 'log')
optimizableVariable('L2Regularization', [1e-10, 1e-2], 'Transform', 'log')];
%% 創(chuàng)建混合CNN-LSTM網(wǎng)絡(luò)架構(gòu)
% 輸入特征維度
numFeatures = f_;
% 輸出特征維度
numResponses = 1;
FiltZise = 10;
% 創(chuàng)建"CNN-LSTM"模型
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')
% LSTM特征學(xué)習(xí)
lstmLayer(50,'Name','lstm1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% LSTM輸出
lstmLayer(optVars.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');
%% CNNLSTM訓(xùn)練選項
% 批處理樣本
MiniBatchSize =128;
% 最大迭代次數(shù)
MaxEpochs = 500;
options = trainingOptions( 'adam', ...
'MaxEpochs',500, ...
'GradientThreshold',1, ...
'InitialLearnRate',optVars.InitialLearnRate, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',400, ...
'LearnRateDropFactor',0.2, ...
'L2Regularization',optVars.L2Regularization,...
'Verbose',false, ...
'Plots','none');
%% 訓(xùn)練混合網(wǎng)絡(luò)
net = trainNetwork(XrTrain,YrTrain,layers,options);
參考資料
[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-431503.html
到了這里,關(guān)于時序預(yù)測 | MATLAB實現(xiàn)BO-CNN-LSTM貝葉斯優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)-長短期記憶網(wǎng)絡(luò)時間序列預(yù)測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!