news 2026/4/15 10:50:27

用卷积神经网络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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 10:50:43

全面讲解Arduino IDE支持的开发板添加方法

手把手教你扩展Arduino IDE:如何优雅地添加任何第三方开发板 你有没有遇到过这样的场景?手头刚收到一块ESP32-S3开发板,兴冲冲打开Arduino IDE想烧个“Blink”试试,结果在“工具 > 开发板”列表里翻了个底朝天——压根找不到它…

作者头像 李华
网站建设 2026/4/14 0:42:21

FaceFusion人脸遮罩实战指南:告别融合边缘问题的终极解决方案

FaceFusion人脸遮罩实战指南:告别融合边缘问题的终极解决方案 【免费下载链接】facefusion Next generation face swapper and enhancer 项目地址: https://gitcode.com/GitHub_Trending/fa/facefusion 还在为人脸融合时出现的生硬边缘和背景干扰而苦恼吗&am…

作者头像 李华
网站建设 2026/4/11 10:39:09

【AI模型本地部署避坑指南】:Open-AutoGLM在手机上为何频频失败?

第一章:Open-AutoGLM是在手机上操作还是云手机Open-AutoGLM 是一个面向自动化大语言模型任务执行的开源框架,其运行环境既支持实体移动设备,也兼容云手机平台。选择在哪种环境中部署,主要取决于性能需求、成本控制与使用场景。本地…

作者头像 李华
网站建设 2026/4/11 23:37:27

Open-AutoGLM深度应用:5个关键技巧解锁手机智能代理新能力

第一章:Open-AutoGLM手机智能代理概述Open-AutoGLM 是一款基于开源大语言模型(LLM)构建的手机端智能代理系统,旨在为移动设备提供本地化、低延迟的自动化任务处理能力。该代理融合了自然语言理解、动作规划与执行控制三大核心模块…

作者头像 李华
网站建设 2026/4/13 21:03:44

doccano文本标注终极指南:从零开始构建高质量AI数据集

doccano文本标注终极指南:从零开始构建高质量AI数据集 【免费下载链接】doccano Open source annotation tool for machine learning practitioners. 项目地址: https://gitcode.com/gh_mirrors/do/doccano 还在为AI项目的数据标注而头疼吗?docca…

作者头像 李华
网站建设 2026/4/14 19:57:49

Open-AutoGLM开发者权限申请指南(附官方未公开的4项材料模板)

第一章:Open-AutoGLM开发者权限申请的核心价值获取 Open-AutoGLM 的开发者权限是参与其生态建设与模型调用的关键前提。该权限不仅开放了对核心推理接口的访问能力,还赋予开发者在安全沙箱环境中调试、部署和优化大语言模型应用的完整控制权。提升开发效…

作者头像 李华