回归预测! 手把手实现MATLAB的CNN 卷积神经网络回归

基于MATLAB的深度学习工具箱(推荐2018b以上),实现CNN回归。网上的例子比较少,这里简单的说一下传统的多输入单输出怎么做。手把手的教(PS:MATLAB自带一个回归教程,竟然还是有学生不知道对照着写)

回归预测! 手把手实现MATLAB的CNN 卷积神经网络回归

MathWorks MATLAB R2024b MacOS Apple Silicon/Inter 中文正式免费版

  • 类型:商业效率
  • 大小:18.0GB
  • 语言:简体中文
  • 时间:2024-09-13

查看详情

1、首先加载数据与数据集划分

clc;clear;close allload datan=700;train_x=input(:,1:n);train_y=output(:,1:n);test_x=input(:,n+1:end);test_y=output(:,n+1:end);

我的输入数据是m*n形式的,m代表有多少个输入特征(如下训练集集数据特征是209个),n是有多少个样本(如下训练集数据样本是700个),输出数据是1*n,1代表输出是单输出。划分后如下

回归预测! 手把手实现MATLAB的CNN 卷积神经网络回归

2、数据归一化(或者标准化,看哪个效果好)

method=@mapminmax;% method=@mapstd;[train_x,train_ps]=method(train_x);test_x=method('apply',test_x,train_ps);[train_y,output_ps]=method(train_y);test_y=method('apply',test_y,output_ps);

程序里用的是mapminmax,就是极大极小值归一化,

3、数据的一个转换,转换成MATLAB的CNN的输入数据形式,是4-D形式的,最后一维就是样本数

trainD=reshape(train_x,[209,1,1,700]);%训练集输入testD=reshape(test_x,[209,1,1,311]);%测试集输入targetD = train_y;%训练集输出targetD_test  = test_y;%测试集输出

转换后训练集输入的size是209*1*1*700,输出的size是1*700

4、CNN模型建立

layers = [    imageInputLayer([209 1 1]) %输入层参数设置    convolution2dLayer([3,1],16,'Padding','same')%卷积层的核大小[3 1],因为我们的输入是[209 1],是一维的数据,所以卷积核第二个参数为1就行了,这样就是1d卷积%、数量,填充方式    reluLayer%relu激活函数    maxPooling2dLayer([2 1],'Stride',2)% 2x1 kernel stride=2    fullyConnectedLayer(384) % 384 全连接层神经元    reluLayer%relu激活函数    fullyConnectedLayer(384) % 384 全连接层神经元    fullyConnectedLayer(1) % 输出层神经元    regressionLayer];%添加回归层,用于计算损失值 

5、模型训练与测试

% 设置迭代次数 batchsize 学习率啥的options = trainingOptions('adam', ...    'MaxEpochs',20, ...    'MiniBatchSize',16, ...    'InitialLearnRate',0.005, ...    'GradientThreshold',1, ...    'Verbose',false,...    'Plots','training-progress',...    'ValidationData',{testD,targetD_test'});%这里要吐槽一下,输入数据都是最后一维为样本数,偏偏输出要第一维为样本数,所以targetD和targetD_test都取了转置% 训练net = trainNetwork(trainD,targetD',layers,options);% 预测YPred = predict(net,testD);% 结果YPred=double(YPred');%输出是n*1的single型数据,要转换为1*n的double是数据形式% 反归一化predict_value=method('reverse',YPred,output_ps);predict_value=double(predict_value);true_value=method('reverse',targetD_test,output_ps);true_value=double(true_value);

回归预测! 手把手实现MATLAB的CNN 卷积神经网络回归

如果options里面没有ValidationData那一句,就看不到验证集(比较懒,没有换分验证集,用的测试集代替)的loss变化,就不方便判断模型有没有过拟合。

6、最后是模型评价

 figureplot(true_value,'-*','linewidth',3)hold onplot(predict_value,'-s','linewidth',3)legend('实际值','预测值')grid onrmse=sqrt(mean((true_value-predict_value).^2));disp(['根均方差(RMSE):',num2str(rmse)])mae=mean(abs(true_value-predict_value));disp(['平均绝对误差(MAE):',num2str(mae)])mape=mean(abs((true_value-predict_value)./true_value));disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])

回归预测! 手把手实现MATLAB的CNN 卷积神经网络回归

根均方差(RMSE):9.3368e-05平均绝对误差(MAE):6.9173e-05平均相对百分误差(MAPE):0.0069244%

文章来自互联网,只做分享使用。发布者:小俊技术分享,转载请注明出处:https://www.baoxiaoke.com/article/279134.html

(0)
上一篇 2025-01-14 01:30
下一篇 2025-01-14 01:30

相关推荐

联系我们

在线咨询: QQ交谈

邮件:442814395@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信