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