news 2026/1/12 13:36:05

用卷积神经网络CNN实现多输入多输出的拟合预测建模(Matlab 版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用卷积神经网络CNN实现多输入多输出的拟合预测建模(Matlab 版)

卷机神经网络CNN做多输入多输出的拟合预测建模。 程序内注释详细直接替换数据就可以使用。 程序语言为matlab。 程序直接运行可以出拟合预测图,线性拟合预测图,多个预测评价指标。

在机器学习的世界里,卷积神经网络(CNN)通常用于图像识别等领域,但其实它在多输入多输出的拟合预测建模中也能发挥强大的作用。今天咱们就来聊聊怎么用 Matlab 实现基于 CNN 的多输入多输出拟合预测建模。

一、整体思路

我们的目标是构建一个 CNN 模型,它能够接收多个输入数据,并输出对应的预测结果。这些输入数据可以是不同维度、不同类型的数据,通过 CNN 的特征提取和映射能力,将其转化为我们需要的预测值。

二、Matlab 代码实现

% 1. 数据准备 % 假设我们有两个输入数据集 X1 和 X2,它们的维度分别为 [样本数, 特征维度1] 和 [样本数, 特征维度2] % 以及对应的输出数据集 Y,维度为 [样本数, 输出维度] load('input_data1.mat'); % 替换为实际数据文件名 X1 = input_data1; load('input_data2.mat'); % 替换为实际数据文件名 X2 = input_data2; load('output_data.mat'); % 替换为实际数据文件名 Y = output_data; % 将数据分为训练集和测试集 trainRatio = 0.8; numSamples = size(X1, 1); numTrain = floor(trainRatio * numSamples); trainIndex = 1:numTrain; testIndex = (numTrain + 1):numSamples; X1Train = X1(trainIndex, :); X2Train = X2(trainIndex, :); YTrain = Y(trainIndex, :); X1Test = X1(testIndex, :); X2Test = X2(testIndex, :); YTest = Y(testIndex, :); % 2. 构建 CNN 模型 layers = [ sequenceInputLayer(size(X1, 2)) % 输入层,对应第一个输入数据维度 convolution1dLayer(5, 16, 'Padding', 'same') % 1D 卷积层,卷积核大小 5,16 个滤波器 batchNormalizationLayer % 批归一化层 reluLayer % 激活函数层 maxPooling1dLayer(2) % 最大池化层,池化大小 2 sequenceInputLayer(size(X2, 2)) % 第二个输入数据的输入层 convolution1dLayer(5, 16, 'Padding', 'same') batchNormalizationLayer reluLayer maxPooling1dLayer(2) concatenationLayer(2, 'Name', 'concat') % 连接两个分支的输出 fullyConnectedLayer(32) % 全连接层 reluLayer fullyConnectedLayer(size(Y, 2)) % 输出层,输出维度与实际输出一致 regressionLayer]; % 回归层,用于拟合预测 % 3. 训练模型 options = trainingOptions('adam',... 'MaxEpochs', 100,... 'MiniBatchSize', 32,... 'InitialLearnRate', 0.001,... 'Shuffle', 'every-epoch',... 'Plots', 'training-progress'); net = trainNetwork([X1Train; X2Train], YTrain, layers, options); % 4. 预测 YPred = predict(net, [X1Test; X2Test]); % 5. 评价指标计算 mseValue = mse(YPred, YTest); % 均方误差 rmseValue = sqrt(mseValue); % 均方根误差 maeValue = mae(YPred, YTest); % 平均绝对误差 fprintf('均方误差 MSE: %.4f\n', mseValue); fprintf('均方根误差 RMSE: %.4f\n', rmseValue); fprintf('平均绝对误差 MAE: %.4f\n', maeValue); % 6. 绘图 figure; subplot(2,1,1); scatter(YTest(:, 1), YPred(:, 1)); % 以第一个输出维度为例绘制散点图 xlabel('实际值'); ylabel('预测值'); title('拟合预测散点图'); subplot(2,1,2); plot(1:size(YTest, 1), YTest(:, 1), 'b', 'DisplayName', '实际值'); % 绘制线性拟合预测图 hold on; plot(1:size(YPred, 1), YPred(:, 1), 'r--', 'DisplayName', '预测值'); xlabel('样本序号'); ylabel('数值'); title('线性拟合预测图'); legend;

三、代码分析

  1. 数据准备部分
    - 我们通过load函数加载输入数据X1X2和输出数据Y。这里你需要将inputdata1.matinputdata2.matoutput_data.mat替换为你实际的数据文件名。
    - 然后将数据按照trainRatio(这里设为 0.8)的比例划分为训练集和测试集。这样做是为了在训练模型后,能够用未参与训练的数据来评估模型的泛化能力。
  1. 构建 CNN 模型部分
    - 我们使用sequenceInputLayer定义了两个输入层,分别对应X1X2的维度。这是因为 CNN 可以处理序列数据,而我们的输入数据虽然不一定是严格意义上的时间序列,但可以看作是一种特征序列。
    - 接着,我们为每个输入分支构建了 1D 卷积层(convolution1dLayer)。卷积层的作用是提取数据中的局部特征,这里卷积核大小设为 5,16 个滤波器。Padding设置为same是为了保持卷积后数据的长度不变。
    -batchNormalizationLayer用于对数据进行批归一化,它可以加速模型的收敛,并减少梯度消失或爆炸的问题。
    -reluLayer是激活函数层,这里使用 ReLU 函数,它能够给模型引入非线性因素,使模型能够学习到更复杂的映射关系。
    -maxPooling1dLayer进行最大池化操作,池化大小为 2,它可以降低数据维度,同时保留主要特征。
    - 通过concatenationLayer将两个分支的输出连接起来,这样就把两个输入数据的特征融合到了一起。
    - 之后是两个全连接层(fullyConnectedLayer),第一个全连接层有 32 个神经元,进一步对融合后的特征进行处理,第二个全连接层的神经元数量与输出维度相同,直接输出预测结果。最后通过regressionLayer定义回归层,用于拟合预测。
  1. 训练模型部分
    - 使用trainingOptions来设置训练的参数。这里选择了 Adam 优化器,它是一种常用的优化算法,能够自适应地调整学习率。MaxEpochs设置为 100,表示训练 100 个 epoch。MiniBatchSize设为 32,意味着每次训练使用 32 个样本。InitialLearnRate是初始学习率,设为 0.001。Shuffle设置为every - epoch表示每个 epoch 都对数据进行打乱,以避免模型过拟合。Plots设置为training - progress可以在训练过程中实时显示训练进度图。
  1. 预测部分
    - 使用predict函数对测试集数据进行预测,得到预测结果YPred
  1. 评价指标计算部分
    - 通过mse函数计算均方误差(MSE),它衡量了预测值与实际值之间误差的平方的平均值。
    -rmseValue是均方根误差(RMSE),它是 MSE 的平方根,这样与实际值的单位相同,更直观地反映预测的误差大小。
    -mae函数计算平均绝对误差(MAE),它衡量了预测值与实际值之间误差的绝对值的平均值。
  1. 绘图部分
    - 我们使用scatter函数绘制了拟合预测散点图,以观察预测值与实际值的分布关系。
    - 使用plot函数绘制了线性拟合预测图,直观地展示预测值和实际值随样本序号的变化情况,方便我们进一步评估模型的预测效果。

通过以上步骤,我们就用 Matlab 成功实现了基于 CNN 的多输入多输出拟合预测建模,并且能够得到拟合预测图、线性拟合预测图以及多个预测评价指标,方便我们对模型进行评估和优化。希望这篇博文对你有所帮助,赶紧试试吧!

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

企业级无线网络管理神器:UniFi网络应用Docker部署实战指南

企业级无线网络管理神器:UniFi网络应用Docker部署实战指南 【免费下载链接】docker-unifi-network-application 项目地址: https://gitcode.com/gh_mirrors/do/docker-unifi-network-application 还在为复杂的网络设备配置和管理而烦恼吗?想要一…

作者头像 李华
网站建设 2026/1/8 1:20:24

基于SpringBoot+Vue技术的二手车交易管理系统(源码+文档+部署+讲解)

本课题旨在设计并实现一套基于SpringBootVue前后端分离架构的二手车交易管理系统,破解当前二手车交易中信息不对称、车况不透明、交易流程繁琐、数据管理混乱等行业痛点,适配二手车商家与消费者的高效交易及数字化管理需求。系统后端以SpringBoot为核心框…

作者头像 李华
网站建设 2026/1/11 5:07:23

基于SpringBoot+Vue技术的医疗器械管理系统(源码+文档+部署+讲解)

本课题旨在设计并实现一套基于SpringBootVue前后端分离架构的医疗器械管理系统,破解当前医疗机构中医疗器械信息杂乱、出入库流程不规范、巡检维护无追溯、库存与耗材管控低效等行业痛点,适配医院、诊所等医疗机构的器械全生命周期数字化管理需求。系统后…

作者头像 李华
网站建设 2025/12/31 2:27:36

银河麒麟V10网络调试工具完整配置指南

在银河麒麟V10操作系统中搭建高效的网络调试环境,是每个技术工程师都需要掌握的核心技能。本终极指南将为您详细解析如何在国产操作系统上快速部署Putty、Cutecom和mNetAssist三大调试利器,让您的网络调试工作事半功倍!🚀 【免费下…

作者头像 李华
网站建设 2026/1/3 13:37:52

TensorFlow与Plotly集成:3D动态图表展示

TensorFlow与Plotly集成:3D动态图表展示 在机器学习项目中,模型训练完成后,真正挑战才刚刚开始——我们如何理解这个“黑箱”究竟学到了什么?尤其是在面对高维嵌入空间或复杂损失曲面时,传统的静态图表往往力不从心。一…

作者头像 李华
网站建设 2026/1/4 17:51:05

Whisper-CTranslate2:极速语音识别与音频翻译新革命

Whisper-CTranslate2:极速语音识别与音频翻译新革命 【免费下载链接】whisper-ctranslate2 Whisper command line client compatible with original OpenAI client based on CTranslate2. 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-ctranslate2 …

作者头像 李华