%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 读取数据
res = xlsread('数据.xlsx');
[dataX,dataY,dataYreal,names] = getData();
res=[res dataYreal];
%% 分析数据
num_class = length(unique(res(:, end))); % 类别数(Excel最后一列放类别)
num_dim = size(res, 2) - 1; % 特征维度
num_res = size(res, 1); % 样本数(每一行,是一个样本)
num_size = 0.7; % 训练集占数据集的比例
res = res(randperm(num_res), :); % 打乱数据集(不打乱数据时,注释该行)
flag_conusion = 1; % 标志位为1,打开混淆矩阵(要求2018版本及以上)
%% 设置变量存储数据
P_train = []; P_test = [];
T_train = []; T_test = [];
%% 划分数据集
for i = 1 : num_class
mid_res = res((res(:, end) == i), :); % 循环取出不同类别的样本
mid_size = size(mid_res, 1); % 得到不同类别样本个数
mid_tiran = round(num_size * mid_size); % 得到该类别的训练样本个数
P_train = [P_train; mid_res(1: mid_tiran, 1: end - 1)]; % 训练集输入
T_train = [T_train; mid_res(1: mid_tiran, end)]; % 训练集输出
P_test = [P_test; mid_res(mid_tiran + 1: end, 1: end - 1)]; % 测试集输入
T_test = [T_test; mid_res(mid_tiran + 1: end, end)]; % 测试集输出
end
%% 数据转置
P_train = P_train';
P_test = P_test';
T_train = T_train';
T_test = T_test';
%% 得到训练集和测试样本个数
M = size(P_train, 2);
N = size(P_test , 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 数据平铺
% 将数据平铺成1维数据只是一种处理方式
% 也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
% 但是应该始终和输入层数据结构保持一致
vp_train = double(reshape(p_train, num_dim, 1, 1, M));
vp_test = double(reshape(p_test , num_dim, 1, 1, N));
vt_train = categorical(T_train)';
vt_test = categorical(T_test )';
%% 子函数
fitness = @(x)CostFunction(x,T_train ,vp_train,vt_train,num_dim,num_class );
popsize=20;
maxgen=50;
dim=3;
lb=[10 0.001 1e-10];% batch size 学习率 正则化系数
ub=[50 1 0.01];% batch size 学习率 正则化系数
[Leader_pos,Leader_score, curve]=WOA(popsize,maxgen,dim,lb,ub,fitness);
MiniBatchSize = round(Leader_pos(1)); % 最佳隐藏层节点数
InitialLearnRate = Leader_pos(2); % 最佳初始学习率
L2Regularization =Leader_pos(3); % 最佳L2正则化系数
%% 构造网络结构
layers = [
imageInputLayer([num_dim, 1, 1]) % 输入层 输入数据规模[num_dim, 1, 1]
convolution2dLayer([1, 1], 16) % 卷积核大小 3*1 生成16张特征图
batchNormalizationLayer % 批归一化层
reluLayer % Relu激活层
convolution2dLayer([1, 1], 32) % 卷积核大小 3*1 生成32张特征图
batchNormalizationLayer % 批归一化层
reluLayer % Relu激活层
dropoutLayer(0.2) % Dropout层
fullyConnectedLayer(num_class, "Name", "fc") % 全连接层
softmaxLayer("Name", "softmax") % softmax激活层
classificationLayer("Name", "classification")]; % 分类层
%% 参数设置
% % 参数设置
options = trainingOptions('sgdm', ... % 梯度下降算法adam
'MaxEpochs',500, ... % 最大训练次数 1000
'MiniBatchSize',MiniBatchSize, ...
'GradientThreshold', 1, ...
'InitialLearnRate', InitialLearnRate, ...
'LearnRateSchedule', 'piecewise', ...
'LearnRateDropPeriod',400, ... % 经过800次训练后 学习率为 0.01*0.1
'LearnRateDropFactor',0.2, ...
'L2Regularization', L2Regularization, ...
'ExecutionEnvironment', 'cpu',...
'Verbose', 0, ...
'Plots', 'training-progress');
%% 训练模型
net = trainNetwork(vp_train,vt_train,layers,options);
%% 预测
t_sim1 = predict(net, vp_train);
t_sim2 = predict(net, vp_test );
%% 反归一化
T_sim1 = vec2ind(t_sim1');
T_sim2 = vec2ind(t_sim2');
%% 性能评价
error1 = sum((T_sim1 == T_train))/M * 100 ;
error2 = sum((T_sim2 == T_test)) /N * 100 ;
%% 绘图
figure(1)
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', 'WOA-CNN预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['准确率=' num2str(error1) '%']};
title(string)
grid
name={'人1',' ','人2',' ','人3',' ','人4',' ','人5',' ','人6'};
yticklabels(name)
figure(2)
plot(1: N, T_test, 'r-o', 1: N, T_sim2, 'g-s', 'LineWidth', 1)
legend('真实值', 'WOA-CNN预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['准确率=' num2str(error2) '%']};
title(string)
grid
yticklabels(name)
%% 混淆矩阵
if flag_conusion == 1
figure
cm = confusionchart(T_train, T_sim1);
cm.Title = 'Confusion Matrix for Train Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
figure
cm = confusionchart(T_test, T_sim2);
cm.Title = 'Confusion Matrix for Test Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:Main .m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开除Main.m的其他m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 智能优化算法优化CNN卷积神经网络分类预测系列程序定制或科研合作方向: 4.4.1 遗传算法GA/蚁群算法ACO优化CNN 4.4.2 粒子群算法PSO/蛙跳算法SFLA优化CNN 4.4.3 灰狼算法GWO/狼群算法WPA优化CNN 4.4.4 鲸鱼算法WOA/麻雀算法SSA优化CNN 4.4.5 萤火虫算法FA/差分算法DE优化CNN 4.4.6 其他优化算法优化CNN
资源推荐
资源详情
资源评论
收起资源包目录
【CNN分类】基于matlab鲸鱼算法优化卷积神经网络通信辐射源识别【含Matlab源码 2562期】.zip (10个子文件)
【CNN分类】基于matlab鲸鱼算法优化卷积神经网络通信辐射源识别【含Matlab源码 2562期】
CostFunction.m 2KB
3.png 38KB
main.m 6KB
1.png 62KB
main.asv 6KB
WOA.m 2KB
数据.xlsx 18KB
4.png 33KB
2.png 68KB
getData.m 1KB
共 10 条
- 1
资源评论
- weixin_443279472023-07-07支持这个资源,内容详细,主要是能解决当下的问题,感谢大佬分享~
- 荨4752024-03-18资源有一定的参考价值,与资源描述一致,很实用,能够借鉴的部分挺多的,值得下载。
- mfn02282024-03-22感谢资源主分享的资源解决了我当下的问题,非常有用的资源。
- m0_750287012024-01-23资源很不错,内容和描述一致,值得借鉴,赶紧学起来!
海神之光
- 粉丝: 3w+
- 资源: 2092
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功