基于卷积长短期记忆网络(CNN-LSTM)的多变量回归预测模型(Matlab实现,详细注释,适...
CNN-LSTM多变量回归预测Matlab 基于卷积-长短期记忆网络CNN-LSTM的数据回归预测 1.CNN结合LSTM做拟合回归预测数据多维输入单维输出代码内注释详细直接替换数据就可以使用 2.运行环境Matlab2020b及以上 3.多输入单输出数据回归预测 4.CNN_LSTMNN.m为主文件data为数据 5.所有程序经过验证保证运行 注意数据和文件放在一个文件夹运行。卷积神经网和LSTM这对组合拳在时序预测领域算是老搭档了。咱们今天要聊的这套CNN-LSTM混合模型专治各种不服——尤其是那种多个传感器数据怼脸最后只要预测一个关键指标的场合。比如工厂里十几台设备振动数据预测设备寿命或者气象站多维数据预测温度变化都是它的拿手好戏。先看数据怎么喂给模型。假设你手头有个CSV文件第一列是时间戳后面跟着风速、气压、湿度等六个气象参数最后一列是要预测的降水量。这时候数据预处理就得这么玩data readmatrix(weather_data.csv); train_data data(1:800,2:7); % 取前800行6个特征 train_label data(1:800,8); % 降水量作为标签 test_data data(801:end,2:7); test_label data(801:end,8); % 数据归一化重要 [input_train, input_ps] mapminmax(train_data, 0, 1); [output_train, output_ps] mapminmax(train_label, 0, 1); input_test mapminmax(apply, test_data, input_ps);这里有个坑要注意归一化必须用训练集的参数来处理测试集不然就数据泄漏了。见过有人直接用全量数据归一化结果过拟合到亲妈都不认识。模型架构才是重头戏。咱们的CNN-LSTM网络结构长这样layers [ sequenceInputLayer(6) % 对应6个输入特征 convolution1dLayer(3, 64, Padding,same) % 一维卷积核 batchNormalizationLayer reluLayer maxPooling1dLayer(2,Stride,2) convolution1dLayer(3, 128, Padding,same) batchNormalizationLayer reluLayer maxPooling1dLayer(2,Stride,2) lstmLayer(100, OutputMode,sequence) dropoutLayer(0.2) fullyConnectedLayer(50) reluLayer fullyConnectedLayer(1) regressionLayer];这个结构里卷积层相当于特征提取器专门捕捉局部时序模式。比如3个时间步长的卷积核可以抓住类似气压骤降风速突增这种组合特征。后面的LSTM层则负责捕捉长期依赖比如连续三天的湿度变化趋势。CNN-LSTM多变量回归预测Matlab 基于卷积-长短期记忆网络CNN-LSTM的数据回归预测 1.CNN结合LSTM做拟合回归预测数据多维输入单维输出代码内注释详细直接替换数据就可以使用 2.运行环境Matlab2020b及以上 3.多输入单输出数据回归预测 4.CNN_LSTMNN.m为主文件data为数据 5.所有程序经过验证保证运行 注意数据和文件放在一个文件夹运行。训练配置这块别手软该砸资源就砸options trainingOptions(adam, ... MaxEpochs, 150, ... MiniBatchSize, 64, ... InitialLearnRate, 0.001, ... LearnRateSchedule,piecewise, ... LearnRateDropPeriod, 50, ... LearnRateDropFactor, 0.2, ... GradientThreshold, 1, ... Shuffle,every-epoch, ... Plots,training-progress, ... Verbose,0);注意学习率调整策略前50轮猛学后面开始收敛时适当降速。遇到梯度爆炸也别慌设置GradientThreshold1相当于给梯度加了个安全阀。预测阶段记得把输出数据反归一化pred predict(net, input_test); pred mapminmax(reverse, pred, output_ps); figure plot(test_label,b) hold on plot(pred,r) legend(真实值,预测值) title(预测效果对比)这里经常有人忘记反归一化结果看着预测曲线在0-1之间一脸懵逼。可视化时建议用hold on把真实值和预测值叠在同一张图上对比更直观。实际跑代码时可能会遇到内存不足的问题特别是数据量大的时候。这时候可以调整MiniBatchSize或者试试把卷积层的filter数量减半。另外如果发现验证集loss早早就停止下降不妨把LSTM层的dropout率提到0.3试试。最后说个骚操作在工业场景部署时可以把训练好的网络转成ONNX格式再通过Matlab Coder生成C代码直接集成到嵌入式设备里实时预测。这套流程我们团队在风电故障预测项目里验证过延迟能控制在50ms以内。