⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp.m

📁 BP神经网络
💻 M
字号:
%输入向量
fid=fopen('train_input.m','r');
X=fscanf(fid,'%f',[786,1])';
fclose(fid);                          %训练输入
fid2=fopen('test_input.m','r');
Xtest=fscanf(fid2,'%f',[30,1])';
fclose(fid2);                         %测试输入
%目标向量
fid1=fopen('train_flowoutput.m','r');
Y=fscanf(fid1,'%f',[786,1])';
fclose(fid1);                         %训练输出
fid3=fopen('test_flowoutput.m','r');
Ytest=fscanf(fid3,'%f',[30,1])';
fclose(fid3);                         %测试输出
%归一化
%归一到 0 和1 之间

[x,minp,maxp,y,mint,maxt] = prestd(X,Y);
[xt,minpt,maxpt,yt,mintt,maxtt] = prestd(Xtest,Ytest);
%训练

net=newff(minmax(x),[1,30,1],{'tansig','tansig','tansig'},'traingdx','learngdm','sse');
%minmax的作用是限定输入的范围,因为已经做过归一化,所以输入的范围在0和 1之间。
%这个范围比输入的范围大是可以的,举个例子,比方说归一化的数据是在[0.1, 0.9]之间,范围用[0,1]是可以的,比归一化后的范围如果小的话,就会出问题;
%24为隐层数节点数,可采用经验公式或试算法确定隐层数节点数;
net.trainParam.epochs=1000;
%训练次数
net.trainParam.goal=0.1;
%训练结束的目标,目标误差
net.trainParam.lr=0.1;
%这个是学习率
net.trainParam.show=50;
%结果训练50次显示一次 
net=train(net,x,y);
%训练网络
youtput=sim(net,xt);
%仿真预测
ytrue=poststd(youtput,mintt,maxtt);
%反归一化
(Ytest-ytrue)./Ytest
%预测误差
plot((Ytest-ytrue)./Ytest)
error=mean(mean(abs((Ytest-ytrue)./Ytest)))
%(Ytest-ytrue)./Ytest是相对预测误差
%error是平均相对预测误差
pause
plot(Ytest,'go-');
hold on;
%plot(ytrue,'b*:');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -