【MATLAB第46期】基于MATLAB的改進(jìn)模糊卷積神經(jīng)網(wǎng)絡(luò)IFCNN多分類預(yù)測(cè)模型
一、展示效果
二、思路
在正常CNN卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練階段之后,使用進(jìn)化算法(蜜蜂算法)擬合深度學(xué)習(xí)權(quán)重和偏差。
本文案例數(shù)據(jù)中, 用深度模型進(jìn)行4分類預(yù)測(cè)。
- 先在 CNN 訓(xùn)練之后,為每個(gè)類別權(quán)重創(chuàng)建初始模糊模型
- 然后提取全連接層的權(quán)重進(jìn)行進(jìn)化尋優(yōu),并替換初始權(quán)重
- 最后,優(yōu)化后的權(quán)重(來(lái)自全連接層)建立模型。
數(shù)據(jù)情況:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-505364.html
%% 導(dǎo)入數(shù)據(jù)
res = xlsread('數(shù)據(jù)集.xlsx');
%% 劃分訓(xùn)練集和測(cè)試集
temp = randperm(357);
P_train = res(temp(1: 240), 1: 12)';
T_train = res(temp(1: 240), 13)';
M = size(P_train, 2);
P_test = res(temp(241: end), 1: 12)';
T_test = res(temp(241: end), 13)';
N = size(P_test, 2);
%% 數(shù)據(jù)歸一化
[P_train, ps_input] = mapminmax(P_train, 0, 1);
P_test = mapminmax('apply', P_test, ps_input);
t_train = categorical(T_train)';
t_test = categorical(T_test )';
%% 數(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, 12, 1, 1, M));
p_test = double(reshape(P_test , 12, 1, 1, N));
三、CNN結(jié)構(gòu)參數(shù)
%% 構(gòu)造網(wǎng)絡(luò)結(jié)構(gòu)
layers = [
imageInputLayer([12, 1, 1]) % 輸入層
convolution2dLayer([2, 1], 16) % 卷積核大小為2*1 生成16個(gè)卷積
batchNormalizationLayer % 批歸一化層
reluLayer % relu激活層
maxPooling2dLayer([2, 1], 'Stride', 1) % 最大池化層 大小為2*1 步長(zhǎng)為2
convolution2dLayer([2, 1], 32) % 卷積核大小為2*1 生成32個(gè)卷積
batchNormalizationLayer % 批歸一化層
reluLayer % relu激活層
maxPooling2dLayer([2, 1], 'Stride', 1) % 最大池化層,大小為2*2,步長(zhǎng)為2
fullyConnectedLayer(4) % 全連接層(類別數(shù))
softmaxLayer % 損失函數(shù)層
classificationLayer]; % 分類層
%% 參數(shù)設(shè)置
options = trainingOptions('adam', ... % Adam 梯度下降算法
'MaxEpochs', 500, ... % 最大訓(xùn)練次數(shù) 500
'InitialLearnRate', 1e-3, ... % 初始學(xué)習(xí)率為0.001
'L2Regularization', 1e-04, ... % L2正則化參數(shù)
'LearnRateSchedule', 'piecewise', ... % 學(xué)習(xí)率下降
'LearnRateDropFactor', 0.5, ... % 學(xué)習(xí)率下降因子 0.1
'LearnRateDropPeriod', 450, ... % 經(jīng)過(guò)450次訓(xùn)練后 學(xué)習(xí)率為 0.001 * 0.5
'Shuffle', 'every-epoch', ... % 每次訓(xùn)練打亂數(shù)據(jù)集
'ValidationPatience', Inf, ... % 關(guān)閉驗(yàn)證
'Plots', 'none', ... % 畫出曲線
'Verbose', 1);
四、IFCNN結(jié)構(gòu)參數(shù)
Params.MaxIt=20;%進(jìn)化算法迭代次數(shù)
Params.nScoutBee = 10;%進(jìn)化算法種群數(shù)量
% 訓(xùn)練模型
[net,info] = trainNetwork(p_train, t_train, layers, options);
% 提取全連接層的權(quán)重進(jìn)行進(jìn)化
FullConn=netobj.Layers(10, 1).Weights;
netbias=netobj.Layers(10, 1).Bias;
%% 為每個(gè)類權(quán)重制作基本模糊模型
% 模糊 C 均值 (FCM) 簇?cái)?shù)
ClusNum=3;
% 為每個(gè)類別權(quán)重創(chuàng)建初始模糊模型
for i=1:sizefinal
fism{i}=GenerateFuzzy(datam{i},ClusNum);
end
%% 訓(xùn)練輸出提取
for i=1:sizefinal
TrTar{i}=datam{i}.TrainTargets;
TrInp{i}=datam{i}.TrainInputs;
TrainOutputs{i}=evalfis(TrInp{i},BeesFISm{i});
end;
% 將輸出單元格轉(zhuǎn)換為矩陣
for i=1:sizefinal
EvolvedFullConn(i,:)=TrainOutputs{i}';
end;
%% 替換進(jìn)化的權(quán)重
netobj.Layers(10, 1).Weights=EvolvedFullConn;
% 新網(wǎng)絡(luò)
net2=netobj.Layers;
五、代碼獲取
后臺(tái)私信回復(fù)“45期”獲取下載鏈接。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-505364.html
到了這里,關(guān)于【MATLAB第46期】基于MATLAB的改進(jìn)模糊卷積神經(jīng)網(wǎng)絡(luò)IFCNN分類預(yù)測(cè)模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!