1.算法運(yùn)行效果圖預(yù)覽
2.算法運(yùn)行軟件版本
matlab2022a
3.算法理論概述
????????CNN-GRU-Attention模型結(jié)合了卷積神經(jīng)網(wǎng)絡(luò)(CNN)垫竞、門(mén)控循環(huán)單元(GRU)和注意力機(jī)制(Attention)來(lái)進(jìn)行時(shí)間序列數(shù)據(jù)的回歸預(yù)測(cè)。CNN用于提取時(shí)間序列的局部特征,GRU用于捕獲時(shí)間序列的長(zhǎng)期依賴(lài)關(guān)系恃慧,而注意力機(jī)制則用于在預(yù)測(cè)時(shí)強(qiáng)調(diào)重要的時(shí)間步睡雇。
3.1 CNN(卷積神經(jīng)網(wǎng)絡(luò))部分
???????在時(shí)間序列回歸任務(wù)中污尉,CNN用于捕獲局部特征和模式:
3.2 GRU(門(mén)控循環(huán)單元)部分
GRU用于捕捉時(shí)間序列的長(zhǎng)期依賴(lài)關(guān)系:
3.3 Attention機(jī)制部分
最后坟乾,通過(guò)反向傳播算法調(diào)整所有參數(shù)以最小化預(yù)測(cè)誤差啃沪,并在整個(gè)訓(xùn)練集上迭代優(yōu)化模型昧廷。
4.部分核心程序
%CNN-GRU-ATT
layers = func_model(Dim);
%設(shè)置
%迭代次數(shù)
%學(xué)習(xí)率為0.001
options = trainingOptions('adam', ...??????
???'MaxEpochs', 1500, ...????????????????
???'InitialLearnRate', 1e-4, ...?????????
???'LearnRateSchedule', 'piecewise', ...?
???'LearnRateDropFactor', 0.1, ...???????
???'LearnRateDropPeriod', 1000, ...???????
???'Shuffle', 'every-epoch', ...?????????
???'Plots', 'training-progress', ...????
???'Verbose', false);
%訓(xùn)練
Net = trainNetwork(Nsp_train2, NTsp_train,layers, options);
figure
subplot(211);
plot(1: Num1, Tat_train,'-bs',...
???'LineWidth',1,...
???'MarkerSize',6,...
???'MarkerEdgeColor','k',...
???'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(1: Num1, T_sim1,'g',...
???'LineWidth',2,...
???'MarkerSize',6,...
???'MarkerEdgeColor','k',...
???'MarkerFaceColor',[0.9,0.9,0.0]);
legend('真實(shí)值', '預(yù)測(cè)值')
xlabel('預(yù)測(cè)樣本')
ylabel('預(yù)測(cè)結(jié)果')
grid on
subplot(212);
plot(1: Num1, Tat_train-T_sim1','-bs',...
???'LineWidth',1,...
???'MarkerSize',6,...
???'MarkerEdgeColor','k',...
???'MarkerFaceColor',[0.9,0.0,0.0]);
legend('真實(shí)值', '預(yù)測(cè)值')
xlabel('預(yù)測(cè)樣本')
ylabel('預(yù)測(cè)誤差')
grid on
ylim([-50,50]);
figure
subplot(211);
plot(1: Num2, Tat_test,'-bs',...
???'LineWidth',1,...
???'MarkerSize',6,...
???'MarkerEdgeColor','k',...
???'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(1: Num2, T_sim2,'g',...
???'LineWidth',2,...
???'MarkerSize',6,...
???'MarkerEdgeColor','k',...
???'MarkerFaceColor',[0.9,0.9,0.0]);
legend('真實(shí)值', '預(yù)測(cè)值')
xlabel('測(cè)試樣本')
ylabel('測(cè)試結(jié)果')
grid on
subplot(212);
plot(1: Num2, Tat_test-T_sim2','-bs',...
???'LineWidth',1,...
???'MarkerSize',6,...
???'MarkerEdgeColor','k',...
???'MarkerFaceColor',[0.9,0.0,0.0]);
legend('真實(shí)值', '預(yù)測(cè)值')
xlabel('預(yù)測(cè)樣本')
ylabel('預(yù)測(cè)誤差')
grid on
ylim([-50,50]);