如何调用MATLAB训练神经网络生成的网络进行预测

如何调用MATLAB训练神经网络生成的网络进行预测

问题引出

如何存储和调用已经训练好的神经网络。
本人前几天在智能控制学习的过程中也遇到了这样的问题,翻阅书本只有对网络直接调用,而没有保存训练结果比较好的网络进行数据的预测,然后进行网上查阅在论坛中看了大家的回复,虽然都提到了关键的两个函数“save”和“load”,但或多或少都简洁了些,让人摸不着头脑(当然也可能是本人太菜)。通过不断调试,大致弄明白这两个函数对神经网络的存储。下面附上实例给大家做个说明,希望对跟我有一样问题的朋友有所帮助。

知识准备

如果只是需要在工作目录下保到当前训练好的网络,可以在命令窗口
输入:save name net %name为保存的文件名字,net为已训练好的网络
保存net。
然后在命令窗口
输入:load name net %name为加载的文件名字,net为已保存的网络
加载net。

但一般我们都会在加载完后对网络进行进一步的操作,建议都放在M文件中进行保存网络和调用网络的操作。

代码注解

下面展示 BP神经网络的保存网络net和保存归一化最值

%% 清空环境变量
clc
clear
%% 训练数据预测数据提取及归一化
%下载输入输出数据,这里你可以改成自己想要训练的数据
A= xlsread('B_data.xlsx','B2:E200');
B=xlsread('B_data.xlsx','F2:F200');
C= xlsread('B_data.xlsx','B201:E235');
D=xlsread('B_data.xlsx','F201:F235');
%找出训练数据和预测数据
input_train=A'; %对输入数据进行转置
output_train=B';
input_test=C';
output_test=D';

%选连样本输入输出数据归一化
[inputn,minp,maxp,outputn,mint,maxt]=premnmx(input_train,output_train);%归一化处理

%% BP网络训练
% %初始化网络结构
net=newff(minmax(input_train),[4,6,1],{'tansig','tansig','purelin'},'trainlm');%创建网络,表示有输入层4层,隐层6层,输出层1% 变学习率梯度下降算法  
%net.trainFcn='traingda';
%net.trainFcn='traingda';
net.trainParam.epochs=2000;%设置最大收敛次数
net.trainParam.lr=0.0001;%设置学习速率
net.trainParam.goal=0.00000001;%设置收敛误差
%net.trainParam.min_grad=1e-6;%设置最小性能梯度,一般取1e-6
%net.trainParam.min_fail=10;%设置最大确认失败次数

%网络训练
net=train(net,inputn,outputn);

%% BP网络预测
%预测数据归一化
[input_n,minp,maxp]=premnmx(input_test);%归一化处理

%网络预测输出
an=sim(net,input_n);

%网络输出反归一化
BPoutput=postmnmx(an,mint,maxt);
%% 结果分析
figure(1)
plot(BPoutput,':o')
hold on
plot(output_test,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)

%预测误差
error1=(abs(BPoutput)-output_test)./output_test;
%标准


figure(2)
plot(error1,'-*')
title('BP网络预测相对误差','fontsize',12)
ylabel('相对误差','fontsize',12)
xlabel('样本','fontsize',12)

figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神经网络预测误差百分比')

error = BPoutput-output_test;
%errorsum=sqrt(sum(error.^2)/48);

mape=sum(abs(error./output_test))*(100/48);
%errorsum=sum((abs(error))*(abs(error))')
%errorsum2=errorsum/11
%errorsum3=sqrt(errorsum2)
%avg=mean(B)
save my_BP net;%保存训练好的BP神经网络net于my_BP中
save my_mint mint;%保存训练好的BP神经网络归一化后的最小值于my_mint中
save my_maxt maxt;%保存训练好的BP神经网络归一化后的最大值于my_maxt中

我们一定要保存好神经网络训练好的归一化最值,不然就会在调用网络的时候出现加载之后的神经网络用sim函数就出现了’model’ parameter must be a character vector的错误

下面展示 BP神经网络的加载网络net和加载归一化最值

clc
clear
load my_BP.mat net;%加载训练好的网络模型net
load my_maxt;%加载训练好的网络模型的归一化最大值
load my_mint;%加载训练好的网络模型的归一化最小值
P=xlsread('data_100.xlsx','B2:E101');
input=P';
input_1=premnmx(input);%对待预测数据进行归一化处理
an=sim(net,input_1);
BPoutput_new=postmnmx(an,mint,maxt); %对预测数据结果进行反归一化处理
O=BPoutput_new';
O         %输出结果         %

总结

运用save和load函数进行保存和加载训练结果比较好的神经网络net,进行对数据的预测。我们要注意除了网络net的保存和加载的同时,我们也要对神经网络处理之前的归一化最值给保存下来,不然在使用sim函数调用网络net的时候就会出现报错情况。遇事不要慌,打开浏览器搜索,绝大部分都有解决办法,加上自己思考总结,这样就能学到东西,而不是白嫖了。

  • 54
    点赞
  • 379
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
MATLAB中实现神经网络的保存和调用非常简单。可以使用save函数将网络保存为.mat文件,然后使用load函数导入之前保存的网络。具体实现可以参考以下代码: 保存网络: ``` save('net.mat','net'); ``` 导入网络: ``` load('net.mat'); ``` 这样就可以将训练好的神经网络保存下来,并在需要的时候进行调用。\[1\] 在保存和调用神经网络时,需要注意保存训练好的归一化最值。如果不保存归一化最值,可能在调用网络时出现错误,例如出现'model' parameter must be a character vector的错误。因此,一定要确保保存好训练好的归一化最值。\[3\] #### 引用[.reference_title] - *1* [傻瓜攻略(七)——MATLAB神经网络的保存和调用](https://blog.csdn.net/qq_36108664/article/details/107547474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [如何调用MATLAB训练神经网络生成网络进行预测](https://blog.csdn.net/weixin_44911552/article/details/106466997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值