普洱建設(shè)工程網(wǎng)站怎樣開網(wǎng)站
分類預(yù)測(cè) | MATLAB實(shí)現(xiàn)CNN-GRU-Attention多輸入分類預(yù)測(cè)
目錄
- 分類預(yù)測(cè) | MATLAB實(shí)現(xiàn)CNN-GRU-Attention多輸入分類預(yù)測(cè)
- 分類效果
- 模型描述
- 程序設(shè)計(jì)
- 參考資料
分類效果
模型描述
Matlab實(shí)現(xiàn)CNN-GRU-Attention多變量分類預(yù)測(cè)
1.data為數(shù)據(jù)集,格式為excel,12個(gè)輸入特征,輸出四個(gè)類別;
2.MainCNN-GRU-AttentionNC.m為主程序文件,運(yùn)行即可;
注意程序和數(shù)據(jù)放在一個(gè)文件夾,運(yùn)行環(huán)境為Matlab200b及以上。
4.注意力機(jī)制模塊:
SEBlock(Squeeze-and-Excitation Block)是一種聚焦于通道維度而提出一種新的結(jié)構(gòu)單元,為模型添加了通道注意力機(jī)制,該機(jī)制通過添加各個(gè)特征通道的重要程度的權(quán)重,針對(duì)不同的任務(wù)增強(qiáng)或者抑制對(duì)應(yīng)的通道,以此來提取有用的特征。該模塊的內(nèi)部操作流程如圖,總體分為三步:首先是Squeeze 壓縮操作,對(duì)空間維度的特征進(jìn)行壓縮,保持特征通道數(shù)量不變。融合全局信息即全局池化,并將每個(gè)二維特征通道轉(zhuǎn)換為實(shí)數(shù)。實(shí)數(shù)計(jì)算公式如公式所示。該實(shí)數(shù)由k個(gè)通道得到的特征之和除以空間維度的值而得,空間維數(shù)為H*W。其次是Excitation激勵(lì)操作,它由兩層全連接層和Sigmoid函數(shù)組成。如公式所示,s為激勵(lì)操作的輸出,σ為激活函數(shù)sigmoid,W2和W1分別是兩個(gè)完全連接層的相應(yīng)參數(shù),δ是激活函數(shù)ReLU,對(duì)特征先降維再升維。最后是Reweight操作,對(duì)之前的輸入特征進(jìn)行逐通道加權(quán),完成原始特征在各通道上的重新分配。
程序設(shè)計(jì)
- 完整程序和數(shù)據(jù)獲取方式1:同等價(jià)值程序兌換;
- 完整程序和數(shù)據(jù)獲取方式2:私信博主獲取。
%% 數(shù)據(jù)平鋪
% 將數(shù)據(jù)平鋪成1維數(shù)據(jù)只是一種處理方式
% 也可以平鋪成2維數(shù)據(jù),以及3維數(shù)據(jù),需要修改對(duì)應(yīng)模型結(jié)構(gòu)
% 但是應(yīng)該始終和輸入層數(shù)據(jù)結(jié)構(gòu)保持一致
p_train = double(reshape(P_train, 15, 1, 1, M));
p_test = double(reshape(P_test , 15, 1, 1, N));
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%% 構(gòu)造網(wǎng)絡(luò)結(jié)構(gòu)
layers = [imageInputLayer([15, 1, 1]) % 輸入層convolution2dLayer([2, 1], 16) % 卷積核大小為2*1 生成16個(gè)卷積batchNormalizationLayer % 批歸一化層reluLayer % relu激活層maxPooling2dLayer([2, 1], 'Stride', 1) % 最大池化層 大小為2*1 步長(zhǎng)為2convolution2dLayer([2, 1], 32) % 卷積核大小為2*1 生成32個(gè)卷積batchNormalizationLayer % 批歸一化層reluLayer % relu激活層maxPooling2dLayer([2, 1], 'Stride', 1) % 最大池化層,大小為2*2,步長(zhǎng)為2fullyConnectedLayer(4) % 全連接層(類別數(shù)) softmaxLayer % 損失函數(shù)層classificationLayer]; % 分類層
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%% 創(chuàng)建網(wǎng)絡(luò)
layers = [ ...sequenceInputLayer(12) % 輸入層gruLayer(6, 'OutputMode', 'last') % GRU層reluLayer % Relu激活層fullyConnectedLayer(4) % 全連接層softmaxLayer % 分類層classificationLayer];%% 參數(shù)設(shè)置
options = trainingOptions('adam', ... % Adam 梯度下降算法'MiniBatchSize', 100, ... % 批大小'MaxEpochs', 1000, ... % 最大迭代次數(shù)'InitialLearnRate', 1e-2, ... % 初始學(xué)習(xí)率'LearnRateSchedule', 'piecewise', ... % 學(xué)習(xí)率下降'LearnRateDropFactor', 0.1, ... % 學(xué)習(xí)率下降因子'LearnRateDropPeriod', 700, ... % 經(jīng)過700次訓(xùn)練后 學(xué)習(xí)率為 0.01 * 0.1'Shuffle', 'every-epoch', ... % 每次訓(xùn)練打亂數(shù)據(jù)集'ValidationPatience', Inf, ... % 關(guān)閉驗(yàn)證'Plots', 'training-progress', ... % 畫出曲線'Verbose', false);
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%% 訓(xùn)練模型
net = trainNetwork(p_train, t_train, layers, options);
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/129943065?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/129919734?spm=1001.2014.3001.5501