news 2026/3/10 15:29:59

Matlab卷积神经网络对一维信号进行二分类及多分类的源码详解与实例:从数据加载到混淆矩阵的绘制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Matlab卷积神经网络对一维信号进行二分类及多分类的源码详解与实例:从数据加载到混淆矩阵的绘制

Matlab使用CNN(卷积神经网络)对一维信号(如语音信号、心电图信号)进行二分类源程序。 也可以改成多分类。 会提供原始数据,数据可直接替换为自己的数据运行,注释详细 工作如下: 1、加载数据,一共为200个正常样本和200个异常样本,训练集为80%,即160正常和160异常,一共320条数据;测试集为40正常和40异常,一共80条数据。 2、构建一维CNN架构,层数为两层。 3、构建options。 4、训练。 5、测试,并绘制混淆矩阵。 注:考虑到使用Matlab对一维信号进行CNN分类的教程较少,此程序是为了方便学习怎么搭建网络、测试等等,使用的数据量较少,并且数据本身也易于分类,自己换成自己的数据时可能需要根据实际情况调整网络。

最近在折腾一维信号的分类问题,发现用Matlab搞CNN分类的现成代码确实不多。正好手头有个自用的基础框架,拿过来改改就能跑,特别适合刚入门的同学理解整个流程。下面直接上硬货,咱们边看代码边聊注意事项。

先准备数据这事儿挺关键。假设你的数据已经整理成【样本数×信号长度】的矩阵,比如每个样本是1000个采样点的一维信号:

% 加载数据(这里假装已经load好了) normal_data = randn(200, 1000); % 200个正常样本 abnormal_data = randn(200, 1000); % 200个异常样本 % 打乱顺序防止批次偏差 shuffled_idx = randperm(400); all_data = [normal_data; abnormal_data]; all_labels = [ones(200,1); zeros(200,1)]; all_data = all_data(shuffled_idx, :); all_labels = all_labels(shuffled_idx, :); % 切分训练测试集 train_x = all_data(1:320, :); train_y = all_labels(1:320, :); test_x = all_data(321:end, :); test_y = all_labels(321:end, :); % 转成matlab需要的格式(样本数×1×长度×通道数) train_x = reshape(train_x, [320,1,1000,1]); test_x = reshape(test_x, [80,1,1000,1]);

这里有个坑要注意:如果你的信号长度不一致,得先做插值或者截断对齐。我之前处理心电信号时就遇到过这个问题,最后用动态时间规整解决的。

接下来是网络结构搭建,这里用两层卷积+池化的经典组合:

layers = [ imageInputLayer([1 1000 1], 'Name', 'input') % 输入层 convolution2dLayer([1 15], 16, 'Padding', 'same', 'Name', 'conv1') % 一维卷积 batchNormalizationLayer reluLayer maxPooling2dLayer([1 5], 'Stride', [1 3], 'Name', 'pool1') % 一维池化 convolution2dLayer([1 10], 32, 'Padding', 'same', 'Name', 'conv2') batchNormalizationLayer reluLayer maxPooling2dLayer([1 5], 'Stride', [1 3], 'Name', 'pool2') globalAveragePooling2dLayer fullyConnectedLayer(2) softmaxLayer classificationLayer];

这里有两个骚操作:

  1. 用imageInputLayer处理一维信号,本质是把单通道当作二维的特殊情况
  2. 全局平均池化替代全连接层,实测能有效防止过拟合,尤其在小样本场景下

训练参数配置直接影响收敛速度,新手建议先用默认参数试水:

options = trainingOptions('adam', ... 'MaxEpochs', 30, ... 'MiniBatchSize', 32, ... 'ValidationData', {test_x, categorical(test_y')}, ... 'ValidationFrequency', 10, ... 'Verbose', true, ... 'Plots', 'training-progress');

重点说下ValidationFrequency设置。当你的训练集很大时,可以适当调高这个值加快训练。但咱们这个例子数据量小,设为10刚好能在每个epoch验证两次。

训练启动就一行代码:

net = trainNetwork(train_x, categorical(train_y'), layers, options);

跑起来后盯着训练曲线看,如果验证集准确率早早就到95%以上但训练集还在涨,八成是过拟合了。这时候可以试试在卷积层后面加Dropout层,比如设置0.5的丢弃率。

测试环节要关注实际应用场景的需求:

% 预测并计算指标 pred_labels = classify(net, test_x); accuracy = sum(pred_labels == categorical(test_y'))/numel(test_y) % 混淆矩阵可视化 plotconfusion(categorical(test_y'), pred_labels) set(gca, 'XTickLabel', {'正常','异常'}) set(gca, 'YTickLabel', {'正常','异常'}) % 计算ROC曲线(需要深度学习工具箱) [~,scores] = predict(net,test_x); [X,Y,T,AUC] = perfcurve(test_y', scores(:,2), 1); figure; plot(X,Y); xlabel('假阳性率'); ylabel('真阳性率')

遇到过特别有意思的情况:某次测试准确率高达99%,但实际部署时效果差,后来发现是测试集分布和真实场景不一致。所以建议在代码里预留数据增强的接口,比如加噪声、时移等操作。

最后说说工程化改进方向:

  1. 改用小波变换后的特征作为输入,对非平稳信号效果更好
  2. 在第一个卷积层后加残差连接,处理长程依赖
  3. 用贝叶斯优化自动调参
  4. 部署时改用C++接口加速推理

这个框架改成多分类也简单,把最后的全连接层输出改成类别数,损失函数换成交叉熵就行。完整代码已打包放在Github(假装有链接),换自己的数据时注意调整输入层的信号长度参数。遇到问题欢迎评论区交流,看到都会回~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/9 19:33:43

公共交通报站:地铁公司测试VoxCPM-1.5-TTS-WEB-UI新型语音系统

公共交通报站:地铁公司测试VoxCPM-1.5-TTS-WEB-UI新型语音系统 在早晚高峰的地铁车厢里,一句清晰、沉稳的“前方到站:人民广场”往往比任何电子提示灯更能安抚乘客的焦虑。然而,你是否想过,这句播报不再是多年前录好的…

作者头像 李华
网站建设 2026/3/9 19:33:40

告别论文拼凑:用宏智树AI建立你的“研究生产流水线”

深夜,电脑屏幕的光映在疲惫的脸上,打开的文档上标题刺眼,下方的字数统计仍然停留在两位数。这不是一个普通的写作任务,而是一座名为“毕业论文”的横在学术之路上的大山。深夜,电脑屏幕的光映在疲惫的脸上,…

作者头像 李华
网站建设 2026/3/9 19:33:38

5款AI写论文哪个好?宏智树AI凭真实文献与图表功能强势领跑

深夜的图书馆里,李昊对着空白的Word文档发呆,论文截止日期只剩一周。他决定同时打开几款热门的AI写作软件,想看看哪款能帮他写出合格初稿。这个决定,让他直观感受到了从“文字游戏”到“科研伙伴”的天壤之别。 面对海量文献的茫然…

作者头像 李华
网站建设 2026/3/9 19:33:36

宠物情感表达:主人上传文字由VoxCPM-1.5-TTS-WEB-UI‘翻译’狗语猫语

宠物情感表达:主人上传文字由VoxCPM-1.5-TTS-WEB-UI‘翻译’狗语猫语 你有没有试过对着家里的狗狗说:“今天我好想你呀!”然后期待它能“回一句”?虽然它们不会说话,但人类对宠物的情感投射从未停止。现在,…

作者头像 李华
网站建设 2026/3/9 19:33:34

Python爬虫实战:利用Playwright与Asyncio高效抓取知识分享平台

一、引言:现代网络爬虫的技术演进 在当今信息爆炸的时代,知识分享平台如知乎、CSDN、掘金等已成为我们获取专业知识的重要渠道。作为数据科学家、研究者或内容分析者,我们经常需要从这些平台采集结构化数据用于分析研究。传统的requestsBeau…

作者头像 李华
网站建设 2026/3/9 19:33:32

数字人底层技术揭秘:VoxCPM-1.5-TTS-WEB-UI提供唇形同步音频

数字人底层技术揭秘:VoxCPM-1.5-TTS-WEB-UI 提供唇形同步音频 在虚拟主播直播带货、AI 教师授课、数字客服24小时在线的今天,我们越来越难分辨屏幕对面是“真人”还是“数字人”。而真正决定这种体验真实感的关键,往往不在于建模有多精细&…

作者头像 李华