
简介本资源是一套面向深度学习初学者与MATLAB工程实践者的CNN多输入回归预测完整实现方案聚焦于利用卷积神经网络处理7维特征输入并预测连续型目标值适用于时间序列建模、传感器融合分析、工业参数预测等实际回归场景。压缩包共7个文件867KB含核心MATLAB主程序MainCNNR.m构建网络、训练与预测全流程、数据集data.xlsx含7输入1输出的标准化样本、4张关键可视化图展示网络结构、损失曲线与预测效果及1份详细说明文档CNN多元回归预测.docx涵盖原理、数据预处理逻辑与结果分析。已有3697人学习下载资源结构紧凑、开箱即用无需额外配置即可运行复现不仅提供可直接调试的完整源码还通过图文结合方式厘清多输入CNN在回归任务中的数据流向与层设计要点是理解深度学习回归建模与MATLAB深度学习工具箱应用的优质实践材料。1. 项目概述当MATLAB遇上CNN回归预测作为一名在工业数据分析和算法工程领域摸爬滚打了十多年的工程师我见过太多同行在面对复杂的多变量、非线性回归预测问题时第一反应就是去翻Python的TensorFlow或PyTorch教程。这当然没错生态丰富社区活跃。但很多时候尤其是在工程仿真、信号处理、控制系统等传统强项领域我们的数据预处理、特征工程乃至整个工作流都深度绑定在MATLAB环境中。为了一个预测模型将数据倒来倒去在不同平台间切换不仅效率低下还容易引入错误。最近我完成了一个“MATLAB实现CNN卷积神经网络多输入回归预测”的项目核心目标就是在MATLAB这一单一平台上打通从多源数据到CNN回归模型构建、训练与部署的全流程让深耕MATLAB的工程师和研究者能“就地解决”复杂的预测问题。这个项目能做什么简单说它提供了一套完整的工具箱允许你直接使用MATLAB处理和融合来自不同传感器、不同模态比如一维时序信号、二维图像特征图、三维频谱数据的输入数据构建一个端到端的卷积神经网络并输出一个或多个连续的预测值。它解决的正是“数据在MATLAB里模型也想在MATLAB里训但MATLAB的深度学习工具箱对多输入和复杂CNN回归的支持不够直观”这个痛点。无论你是做机械设备的剩余寿命预测RUL、金融时间序列 forecasting还是复杂系统的性能指标回归只要你的输入是多维的、特征需要自动提取的这套方案都值得一试。2. 核心思路与架构设计为何选择MATLAB Deep Learning Toolbox在决定用MATLAB实现多输入CNN回归之前我们需要理清几个关键问题为什么是MATLAB为什么是CNN以及“多输入”具体意味着什么2.1 平台选型MATLAB Deep Learning Toolbox的利与弊选择MATLAB而非Python并非技术上的倒退而是基于特定场景的务实考量。优势方面无缝集成如果你的数据源来自Simulink仿真、仪器采集工具箱如Data Acquisition Toolbox、图像处理工具箱或者需要频繁调用各种数学计算和信号处理函数如小波变换、频谱分析MATLAB提供了零成本的交互。数据无需导出为CSV或HDF5再读入另一个平台避免了格式转换的麻烦和潜在的数据精度损失。工程化友好MATLAB的APP设计器、编译器可将模型打包成独立应用或C/C库以及与PLC、嵌入式代码生成的衔接通过MATLAB Coder对于需要将模型部署到生产环境或嵌入式设备的工程项目来说链路更短可控性更强。调试与可视化Deep Learning Toolbox提供了训练进度图、激活可视化、梯度流分析等工具与MATLAB强大的绘图能力结合调试和分析模型行为非常直观。特别是analyzeNetwork函数可以一键生成网络结构分析图清晰展示数据流和层尺寸变化。面临的挑战与应对灵活性相对受限相比PyTorch的动态图MATLAB的dlarray和层图方式定义网络在实现一些极其定制化的层或复杂动态结构时需要编写更底层的自定义层。我们的方案通过封装一些常用的多输入融合层如拼接、加权相加作为自定义层来弥补这一不足。社区与预训练模型生态规模不及Python。我们的策略是对于基础特征提取利用MATLAB提供的预训练CNN如GoogLeNet、ResNet-18但需注意这些主要用于图像分类进行迁移学习或特征提取对于全新的回归结构则从零开始构建轻量级CNN更可控。大数据处理对于超大规模数据集MATLAB可能需要依赖datastore对象如imageDatastore,arrayDatastore进行流式读取这对内存管理提出了要求。在项目实现中我们特别设计了支持datastore输入的训练循环确保能处理超出内存的数据。2.2 模型选型CNN用于回归任务的核心逻辑很多人对CNN的印象停留在图像分类。将其用于回归尤其是多输入回归需要转变思路。CNN的核心价值在于局部特征提取与参数共享。对于一维时序信号如振动传感器数据一维卷积核可以捕捉信号中的局部波动模式如特定频率的振荡对于二维数据如频谱图、二维传感器阵列数据二维卷积核可以捕捉空间或时频域中的局部相关性。这种能力对于从原始数据中自动学习出对预测目标有效的、层次化的特征表示至关重要省去了复杂且需要专业知识的传统特征工程。多输入的设计哲学所谓“多输入”是指我们有多个数据源每个数据源可能维度不同、物理意义不同。例如预测一台发动机的油耗我们可能有1一维时序的转速、扭矩信号2二维的缸内压力热力图随时间变化3另一组一维的排气温度信号。简单的做法是将所有数据展平拼接成一个巨长的向量输入全连接网络但这会彻底破坏数据的局部结构并且参数量爆炸。更优的做法是为每个数据源设计一个特征提取子网络Subnetwork通常是若干卷积层和池化层再将各子网络提取出的高级特征进行融合最后通过全连接层映射到预测值。这种架构尊重了不同数据源的固有结构。2.3 整体架构设计图概念层我们的网络架构遵循以下设计范式下图展示了数据流的逻辑概念输入1 (e.g., 1D 时序信号) - 1D CNN 子网络 - 高级特征向量1 输入2 (e.g., 2D 频谱图) - 2D CNN 子网络 - 高级特征向量2 输入3 (e.g., 1D 其他指标) - 1D CNN 子网络 - 高级特征向量3 ↓ 特征融合层 (拼接/加权和) ↓ 若干全连接层 (带Dropout防过拟合) ↓ 输出层 (线性层输出回归值)在这个架构中每个子网络可以根据其输入数据的特性进行独立定制卷积核大小、层数、通道数。融合层是关键它决定了不同模态特征如何交互。项目源码中提供了最常用的拼接concatenation融合方式也实现了注意力加权融合attention-based fusion的示例后者能让网络动态关注对当前预测更重要的输入源。3. 数据准备与预处理为多输入CNN定制数据流在MATLAB中构建多输入模型数据准备是第一步也是最容易出错的一步。核心在于创建能被trainNetwork函数或自定义训练循环正确读取的数据存储。3.1 多输入数据的组织格式假设我们有N个样本每个样本有K个不同的输入。MATLAB深度学习工具箱期望的数据格式通常是通过cell array或datastore来组织。方案一使用Cell Array适用于数据可装入内存的情况这是最直观的方法。我们创建一个N×K的cell数组X其中X{i, j}代表第i个样本的第j种输入数据。对应的标签回归目标值是一个N×M的数值矩阵YM是输出维度单输出则M1。% 假设1000个样本3种输入 numSamples 1000; X cell(numSamples, 3); % 三输入 Y zeros(numSamples, 1); % 单输出回归值 for i 1:numSamples % 输入1: 1x1000 的一维时序数据 X{i, 1} randn(1, 1000); % 输入2: 64x64 的二维图像/谱图 X{i, 2} randn(64, 64, 1); % 灰度图第三维是通道数 % 输入3: 1x50 的另一组一维特征 X{i, 3} randn(1, 50); % 对应的标签例如某个性能指标 Y(i) someFunctionOf(X{i,1}, X{i,2}, X{i,3}); % 示例 end方案二使用Combined Datastore适用于大数据集当数据量太大时我们需要使用datastore。MATLAB的combine函数可以将多个datastore合并。% 为每种输入创建对应的ArrayDatastore或ImageDatastore ds1 arrayDatastore(Input1Data, IterationDimension, 1); % 假设Input1Data是numSamples x 1 x 1000 的3D数组 ds2 imageDatastore(Input2ImageFolder); % 从文件夹读取二维图像 ds3 arrayDatastore(Input3Data, IterationDimension, 1); % 合并成一个多输入datastore cds combine(ds1, ds2, ds3); % 为标签创建datastore dsLabels arrayDatastore(Y, IterationDimension, 1); % 最终组合成带标签的datastore trainingData combine(cds, dsLabels);注意使用combine时read函数返回的是一个1xK的cell数组其中前K-1个元素是输入最后一个元素是标签。在自定义训练循环中需要仔细处理。3.2 数据标准化与增强标准化Normalization对于回归任务特别是当输入数据量纲差异巨大时比如电压值是0-5温度是0-1000必须进行标准化。通常对每个输入通道独立进行Z-score标准化减均值除以标准差。可以在数据预处理阶段完成也可以通过网络中的normalizationLayer来实现。我推荐在输入网络前完成更清晰可控。% 计算训练集的均值和标准差 meanInput1 mean(cat(2, X{:,1}), 2); stdInput1 std(cat(2, X{:,1}), 0, 2); % 标准化所有数据包括验证集和测试集 for i 1:numSamples X{i,1} (X{i,1} - meanInput1) ./ stdInput1; % 同理处理其他输入... end数据增强Data Augmentation对于图像类输入可以使用imageDataAugmenter进行随机旋转、平移、缩放等增加泛化能力。对于一维时序信号可考虑加入轻微的高斯噪声、随机时间偏移或幅度缩放。项目源码中包含了一个自定义的时序数据增强函数示例。4. 网络层定义与模型搭建构建多输入CNN回归网络这是项目的核心。我们将使用MATLAB的layerGraph对象来构建一个有向无环图以支持多输入。4.1 定义输入层与子网络首先为每个输入定义imageInputLayer用于2D/3D数据或sequenceInputLayer用于1D序列数据但更常用于RNN。对于简单的1D数组我们通常使用imageInputLayer并将其高度设为1宽度设为序列长度通道数为1将其视为特殊的“图像”。% 输入1: 1D 时序信号长度1000视为 1x1000x1 的“图像” input1 imageInputLayer([1 1000 1], Name, input1, Normalization, none); % 已在外部标准化 % 输入2: 2D 灰度图像64x64 input2 imageInputLayer([64 64 1], Name, input2, Normalization, none); % 输入3: 1D 特征长度50视为 1x50x1 input3 imageInputLayer([1 50 1], Name, input3, Normalization, none); % 为每个输入构建特征提取子网络 % 子网络1: 用于1D时序信号 layers1 [ input1 convolution2dLayer([1 5], 16, Padding, same, Name, conv1_1) % 1D卷积核高1宽5 batchNormalizationLayer(Name, bn1_1) reluLayer(Name, relu1_1) maxPooling2dLayer([1 2], Stride, [1 2], Name, pool1_1) convolution2dLayer([1 3], 32, Padding, same, Name, conv1_2) batchNormalizationLayer(Name, bn1_2) reluLayer(Name, relu1_2) globalAveragePooling2dLayer(Name, gap1) % 输出 1x1x32 flattenLayer(Name, flat1) % 输出 32 维向量 ]; % 子网络2: 用于2D图像 layers2 [ input2 convolution2dLayer(3, 32, Padding, same, Name, conv2_1) batchNormalizationLayer(Name, bn2_1) reluLayer(Name, relu2_1) maxPooling2dLayer(2, Stride, 2, Name, pool2_1) convolution2dLayer(3, 64, Padding, same, Name, conv2_2) batchNormalizationLayer(Name, bn2_2) reluLayer(Name, relu2_2) globalAveragePooling2dLayer(Name, gap2) % 输出 1x1x64 flattenLayer(Name, flat2) % 输出 64 维向量 ]; % 子网络3: 另一个1D输入可以设计得更简单 layers3 [ input3 convolution2dLayer([1 3], 8, Padding, same, Name, conv3_1) reluLayer(Name, relu3_1) flattenLayer(Name, flat3) % 输出 8*50400 维向量注意这里没有池化层 fullyConnectedLayer(20, Name, fc_embed3) % 再加一个全连接层降维到20 reluLayer(Name, relu_fc3) ];4.2 特征融合与回归头设计接下来我们需要将三个子网络的输出特征向量融合起来。% 方法一拼接融合 (Concatenation) concatLayer concatenationLayer(1, 3, Name, concat); % 在维度1特征维度拼接3个输入 % 方法二加权和融合 (需要自定义层项目源码中提供) % 这里以拼接为例继续构建网络 % 回归头全连接层组合 regressionHead [ fullyConnectedLayer(128, Name, fc1) batchNormalizationLayer(Name, bn_fc1) reluLayer(Name, relu_fc1) dropoutLayer(0.5, Name, dropout1) % 防止过拟合 fullyConnectedLayer(64, Name, fc2) reluLayer(Name, relu_fc2) dropoutLayer(0.3, Name, dropout2) fullyConnectedLayer(1, Name, fc_final) % 输出层神经元数等于预测目标维度 regressionLayer(Name, output) % 回归任务损失层 ];4.3 使用layerGraph组装完整网络将上述所有层组装成一个完整的层图。lgraph layerGraph(layers1); % 以第一个子网络为起点 lgraph addLayers(lgraph, layers2(2:end)); % 添加子网络2的层不含input2 lgraph addLayers(lgraph, layers3(2:end)); % 添加子网络3的层不含input3 lgraph addLayers(lgraph, concatLayer); lgraph addLayers(lgraph, regressionHead); % 连接层将各子网络的输出连接到融合层 lgraph connectLayers(lgraph, flat1, concat/in1); lgraph connectLayers(lgraph, flat2, concat/in2); lgraph connectLayers(lgraph, relu_fc3, concat/in3); % 注意是子网络3的最后一个层输出 % 连接融合层到回归头 lgraph connectLayers(lgraph, concat, fc1); % 添加独立的输入层到对应的子网络起点 lgraph addLayers(lgraph, input2); lgraph addLayers(lgraph, input3); lgraph connectLayers(lgraph, input2, conv2_1); lgraph connectLayers(lgraph, input3, conv3_1); % 分析网络结构 analyzeNetwork(lgraph)运行analyzeNetwork后MATLAB会生成一个交互式网络结构图你可以清晰地看到三个独立的输入流如何汇聚到concat层再经过全连接层输出。这是确保连接正确的关键一步。5. 模型训练、调参与验证策略网络搭建好后训练过程的配置同样重要尤其是对于多输入和回归任务。5.1 训练选项Training Options精细配置options trainingOptions(adam, ... % 对于回归任务Adam通常是好的起点 InitialLearnRate, 1e-3, ... % 学习率从1e-3开始 MaxEpochs, 150, ... % 最大迭代轮次 MiniBatchSize, 32, ... % 根据GPU内存调整。多输入数据可能更耗内存。 Shuffle, every-epoch, ... % 每轮打乱数据 ValidationData, {XVal, YVal}, ... % 验证集格式需与训练集X一致 ValidationFrequency, 30, ... % 每30次迭代验证一次 Verbose, true, ... % 显示训练信息 VerboseFrequency, 30, ... Plots, training-progress, ... % 绘制训练过程图 ExecutionEnvironment, auto, ... % 自动选择GPU或CPU LearnRateSchedule, piecewise, ... LearnRateDropFactor, 0.5, ... LearnRateDropPeriod, 50, ... % 每50轮学习率减半 L2Regularization, 1e-4, ... % 权重衰减防止过拟合 GradientThreshold, 1, ... % 梯度裁剪阈值防止梯度爆炸 CheckpointPath, tempdir); % 保存检查点防止训练中断关键参数解析MiniBatchSize多输入模型每个样本的数据量较大需要根据GPU内存谨慎设置。如果内存不足MATLAB会报错。可以从16或32开始尝试。ValidationData验证集用于监控模型在未见数据上的表现防止过拟合。其格式必须与训练集X完全一致例如同样是NxK的cell数组。LearnRateSchedule使用分段下降策略在训练后期降低学习率有助于模型收敛到更优的局部最优点。L2Regularization回归模型容易过拟合加入L2正则化权重衰减至关重要。5.2 执行训练与监控[net, trainInfo] trainNetwork(X, Y, lgraph, options);trainNetwork函数会自动处理多输入层图。训练过程中关注training-progress图中的两条曲线训练损失Training Loss应稳步下降。验证损失Validation Loss理想情况下也应下降并与训练损失逐渐接近。如果验证损失在若干轮后开始上升而训练损失持续下降这是典型的过拟合信号。5.3 应对过拟合实用技巧多输入CNN回归模型参数多容易过拟合。除了L2正则化和Dropout还有以下方法早停Early Stopping根据trainInfo中的验证损失手动实现或在trainingOptions中设置OutputFcn回调函数当验证损失连续多个epoch不下降时停止训练。数据增强如前所述对训练数据进行合理的增强。简化网络减少各子网络的卷积层通道数或全连接层神经元数。获取更多数据这是最根本的方法。6. 模型评估、预测与部署训练完成后我们需要系统地评估模型并学会如何使用它进行预测。6.1 模型评估指标对于回归任务常用的指标有均方误差MSEmean((Y_pred - Y_true).^2)。损失函数常用此值越小越好。均方根误差RMSEsqrt(MSE)。与目标值同量纲更直观。平均绝对误差MAEmean(abs(Y_pred - Y_true))。对异常值不如MSE敏感。决定系数R²1 - sum((Y_true - Y_pred).^2) / sum((Y_true - mean(Y_true)).^2)。越接近1模型解释力越强。在MATLAB中计算% 预测测试集 YPred predict(net, XTest); % XTest格式需与X相同 % 计算指标 mse mean((YPred - YTest).^2); rmse sqrt(mse); mae mean(abs(YPred - YTest)); ss_res sum((YTest - YPred).^2); ss_tot sum((YTest - mean(YTest)).^2); r2 1 - (ss_res / ss_tot); fprintf(测试集 MSE: %.4f, RMSE: %.4f, MAE: %.4f, R²: %.4f\n, mse, rmse, mae, r2);6.2 使用模型进行单样本预测训练好的net是一个DAGNetwork对象。进行预测时输入必须是一个cell数组其中每个元素对应一个输入。% 假设有一个新样本 newSampleInput1 randn(1, 1000); % 已标准化 newSampleInput2 randn(64, 64, 1); newSampleInput3 randn(1, 50); % 组织成cell数组注意顺序要与网络输入层定义一致 newSampleCell {newSampleInput1, newSampleInput2, newSampleInput3}; % 预测 predictedValue predict(net, newSampleCell);6.3 模型部署与集成生成独立应用使用MATLAB Compiler将包含预测代码的脚本或函数打包成独立的桌面应用.exe等分享给没有MATLAB的同事。生成C/C代码使用MATLAB Coder可以将预测部分的代码通常是经过predict调用的函数自动转换为优化的C/C代码集成到嵌入式系统或其他软件中。注意并非所有深度学习层都支持代码生成需要查阅MATLAB Coder的兼容性列表。自定义层需要提供相应的C代码。导出为ONNX格式使用exportONNXNetwork函数将训练好的网络导出为ONNX格式从而可以在支持ONNX的其他框架如ONNX Runtime, TensorFlow, PyTorch中运行。这是跨平台部署的通用方案。7. 实战避坑指南与常见问题排查基于多个项目的实战经验我总结了一些在多输入CNN回归项目中极易踩坑的地方和解决方法。7.1 数据维度不匹配错误这是最常见的问题。错误信息常类似于“Error using trainNetwork: The input data for layer conv1_1 has invalid size...”或“Error in concatenation layer concat: All inputs must have the same number of dimensions...”。排查步骤使用analyzeNetwork在训练前用analyzeNetwork(lgraph)仔细检查网络每一层的输出尺寸。确保各子网络最终输出到融合层的特征向量维度是你预期的。检查输入数据尺寸确保你的训练数据X{i, j}的尺寸与对应imageInputLayer中定义的尺寸完全一致。例如对于[64, 64, 1]的输入层数据必须是高度x宽度x通道数 64x64x1的三维数组。一维数据[1, 1000]需要表示为1x1000x1。检查融合层输入concatenationLayer要求所有输入在非拼接维度上尺寸一致。例如在特征维度第1维拼接那么其他所有维度如第2、3维如果有必须相同。通常经过flattenLayer或globalAveragePooling2dLayer后输出都是[batchSize, numFeatures]的二维形式在层分析图中显示为“SSCB”格式其中S是空间维度C是通道B是批次拼接时需确保numFeatures维度以外的维度为1。7.2 训练损失为NaN或爆炸这通常意味着学习率太高、数据未标准化、或网络中存在数值不稳定如梯度爆炸。解决方案降低学习率将InitialLearnRate从1e-3降至1e-4或1e-5。严格进行数据标准化确保每个输入通道都进行了Z-score标准化。检查数据中是否存在异常大或异常小的值如Inf,NaN。添加梯度裁剪在trainingOptions中设置GradientThreshold例如设为1。使用批量归一化层在每个卷积层后添加batchNormalizationLayer它能有效稳定训练过程允许使用更高的学习率。检查损失函数回归任务默认使用均方误差MSE。如果你的目标值范围非常大MSE可能会产生巨大梯度。可以考虑对目标值Y也进行标准化预测后再反标准化或尝试使用平滑L1损失需自定义损失层。7.3 模型性能不佳欠拟合或过拟合欠拟合训练和验证损失都高现象训练损失下降缓慢最终仍处高位。对策增加网络容量更多层、更多通道。减少正则化强度降低L2正则化系数减少Dropout率。延长训练时间增加MaxEpochs。检查特征有效性可能当前输入数据本身与预测目标相关性不强。过拟合训练损失低验证损失高现象训练损失持续下降验证损失先降后升。对策增强正则化增加L2系数、增加Dropout率。使用更激进的数据增强。简化网络结构减少层数或通道数。收集更多训练数据。采用早停法。7.4 自定义层的实现与集成当内置层无法满足需求时如注意力融合层需要编写自定义层。要点如下继承nnet.layer.Layer。在构造函数中定义层属性如可学习参数。实现predict方法定义前向传播逻辑。可选实现backward方法如果层包含需要训练的参数必须实现此方法以计算梯度。对于不含参数的层如自定义激活函数可不实现。将自定义层集成到layerGraph和内置层一样使用。项目源码中提供了一个简单的通道注意力融合层示例它学习每个输入特征的权重进行加权求和而不是简单拼接。7.5 内存不足Out of Memory问题处理多输入、大批量数据时极易遇到。减小MiniBatchSize这是最直接有效的方法。使用datastore将数据保存在硬盘上使用combine和transform函数进行流式读取和预处理避免一次性加载所有数据到内存。降低数据精度使用single精度单精度而非默认的double精度存储和计算数据。可以在数据加载时转换X single(X);。MATLAB的深度学习默认支持单精度。清理内存在训练循环前使用clear命令清理不用的变量并使用gpuDevice(1)重置GPU内存如果使用GPU。8. 项目源码结构与应用扩展建议提供的完整源码包不仅包含上述核心代码还按照工程化项目组织便于理解和复用。典型项目结构MultiInput_CNN_Regression/ ├── data/ │ ├── prepare_data.m % 数据生成或加载、预处理、划分脚本 │ └── sample_data.mat % 示例数据 ├── models/ │ ├── create_multi_input_cnn.m % 主网络构建函数 │ ├── attention_fusion_layer.m % 自定义注意力融合层 │ └── custom_loss_layer.m % 示例自定义损失层 ├── utils/ │ ├── normalize_data.m │ ├── evaluate_metrics.m │ └── plot_results.m ├── training/ │ └── train_and_validate.m % 训练与验证主脚本 ├── deployment/ │ ├── predict_single.m % 单样本预测函数 │ └── export_to_onnx.m % 模型导出脚本 └── main_demo.m % 主运行示例从数据到评估的完整流程应用扩展建议输入模态扩展当前支持1D和2D输入。你可以轻松扩展以支持3D输入如视频帧、三维体数据只需使用imageInputLayer并指定3个空间维度如[128, 128, 64, 1]并相应使用3D卷积层convolution3dLayer。输出扩展从单输出回归扩展到多输出回归多任务学习。只需修改输出层的fullyConnectedLayer使其神经元数量等于输出变量总数例如预测发动机的油耗、功率、排放三个指标则设为3。混合模型对于某些输入如长序列CNN可能不是最优的。可以考虑将CNN与LSTM结合用CNN子网络提取局部空间/时域特征然后将特征序列输入LSTM层捕捉长期时序依赖最后接全连接层输出。MATLAB的sequenceInputLayer和lstmLayer可以与此框架结合。贝叶斯深度学习为回归结果提供不确定性估计。可以尝试使用MATLAB的Bayesian Optimization Toolbox来对网络权重进行变分推断或者使用蒙特卡洛Dropout在预测时多次开启Dropout进行前向传播将结果的方差作为不确定性度量。这个项目的价值在于提供了一个可复用的、模块化的框架。你不需要每次都从头开始设计网络连接和数据管道只需替换数据加载模块、微调子网络结构就能快速将其应用到你的特定多输入回归问题上。在MATLAB生态内完成所有工作能极大提升在工程导向场景下的开发效率和系统集成度。本文还有配套的精品资源点击获取