分類預測 | MATLAB實現WOA-CNN-BiLSTM-Attention數據分類預測
目錄
- 分類預測 | MATLAB實現WOA-CNN-BiLSTM-Attention數據分類預測
- 分類效果
- 基本描述
- 程序設計
- 參考資料
分類效果
基本描述
1.MATLAB實現WOA-CNN-BiLSTM-Attention數據分類預測,運行環境Matlab2023b及以上;
2.基于鯨魚優化算法(WOA)、卷積神經網絡(CNN)和雙向長短期記憶網絡(BiLSTM)的數據分類預測程序;
3.多特征輸入單輸出的二分類及多分類模型。程序內注釋詳細,直接替換數據就可以用;過WOA優化算法優化學習率、卷積核大小、神經元個數,這3個關鍵參數,以測試集精度最高為目標函數
程序語言為matlab,程序可出分類效果圖,迭代優化圖,混淆矩陣圖;
4.data為數據集,輸入12個特征,分四類;main為主程序,其余為函數文件,無需運行,可在下載區獲取數據和程序內容。
5.適用領域:適用于各種數據分類場景,如滾動軸承故障、變壓器油氣故障、電力系統輸電線路故障區域、絕緣子、配網、電能質量擾動,等領域的識別、診斷和分類。
使用便捷:直接使用EXCEL表格導入數據,無需大幅修改程序。內部有詳細注釋,易于理解。
程序設計
- 完整程序和數據獲取方式:私信博主回復** MATLAB實現WOA-CNN-BiLSTM-Attention數據分類預測**。
%% 優化算法參數設置
SearchAgents_no = 8; % 數量
Max_iteration = 5; % 最大迭代次數
dim = 3; % 優化參數個數
lb = [1e-3,10 1e-4]; % 參數取值下界(學習率,隱藏層節點,正則化系數)
ub = [1e-2, 30,1e-1]; % 參數取值上界(學習率,隱藏層節點,正則化系數)fitness = @(x)fical(x,num_dim,num_class,p_train,t_train,T_train);[Best_score,Best_pos,curve]=WOA(SearchAgents_no,Max_iteration,lb ,ub,dim,fitness)
Best_pos(1, 2) = round(Best_pos(1, 2));
best_hd = Best_pos(1, 2); % 最佳隱藏層節點數
best_lr= Best_pos(1, 1);% 最佳初始學習率
best_l2 = Best_pos(1, 3);% 最佳L2正則化系數%% 建立模型
lgraph = layerGraph(); % 建立空白網絡結構
tempLayers = [sequenceInputLayer([num_dim, 1, 1], "Name", "sequence") % 建立輸入層,輸入數據結構為[num_dim, 1, 1]sequenceFoldingLayer("Name", "seqfold")]; % 建立序列折疊層
lgraph = addLayers(lgraph, tempLayers); % 將上述網絡結構加入空白結構中
tempLayers = [convolution2dLayer([3, 1], 16, "Name", "conv_1", "Padding", "same") % 建立卷積層,卷積核大小[3, 1],16個特征圖reluLayer("Name", "relu_1") % Relu 激活層convolution2dLayer([3, 1], 32, "Name", "conv_2", "Padding", "same") % 建立卷積層,卷積核大小[3, 1],32個特征圖reluLayer("Name", "relu_2")]; % Relu 激活層
lgraph = addLayers(lgraph, tempLayers); % 將上述網絡結構加入空白結構中tempLayers = [sequenceUnfoldingLayer("Name", "sequnfold") % 建立序列反折疊層flattenLayer("Name", "flatten") % 網絡鋪平層bilstmLayer(best_hd, "Name", "bilstm", "OutputMode","last") % BiLSTM層fullyConnectedLayer(num_class, "Name", "fc") % 全連接層softmaxLayer("Name", "softmax") % softmax激活層classificationLayer("Name", "classification")]; % 分類層
lgraph = addLayers(lgraph, tempLayers); % 將上述網絡結構加入空白結構中
lgraph = connectLayers(lgraph, "seqfold/out", "conv_1"); % 折疊層輸出 連接 卷積層輸入
lgraph = connectLayers(lgraph, "seqfold/miniBatchSize", "sequnfold/miniBatchSize"); % 折疊層輸出連接反折疊層輸入
lgraph = connectLayers(lgraph, "relu_2", "sequnfold/in"); % 激活層輸出 連接 反折疊層輸入%% 參數設置
options = trainingOptions('adam', ... % Adam 梯度下降算法'MaxEpochs', 500,... % 最大訓練次數 1000'InitialLearnRate', best_lr,... % 初始學習率為0.001'L2Regularization', best_l2,... % L2正則化參數'LearnRateSchedule', 'piecewise',... % 學習率下降'LearnRateDropFactor', 0.1,... % 學習率下降因子 0.1'LearnRateDropPeriod', 400,... % 經過800次訓練后 學習率為 0.001*0.1'Shuffle', 'every-epoch',... % 每次訓練打亂數據集'ValidationPatience', Inf,... % 關閉驗證'Plots', 'training-progress',... % 畫出曲線'Verbose', false);%% 訓練
net = trainNetwork(p_train, t_train, lgraph, options);
參考資料
[1] https://blog.csdn.net/kjm13182345320/article/details/129036772?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128690229