赞
踩
非常感谢博主wishes61的分享。这篇博客只是为了记录下第一个神经网络的训练。
下图是训练神经网络时经常出现的一个界面,从这部分我们可以看到,这是一个2输入1输出,5个隐含层的BP网络,称为2-5-1网络结构
需要注意的是:
% 清空环境变量 clc clear all % 1.导入数据 iris=load('iris.csv'); % 统计描述量 feature=iris(:,1:4); mean=mean(feature); % 描述算法平均值 median=median(feature);% 描述元素的中位数 std=std(feature);%描述元素的标准差 % 2. 设置训练数据和预测数据 %doc dividevec[分频器]:divid problem vectors into training,validation and test通过分频器得到的结果为三个struct。其中trainSamples中有90个样本(以列的形式呈现),此外trainSamples.P表示数据的特征;trainSamples.L表示90个样本对应的标签;trainSamples.indices表示90个样本在源数据中对应的位置。 normInput=iris(:,1:4)'; normTarget=iris(:,5)'; testPercent=0.20; %测试数据 validatePercent=0.20;%验证数据 [trainSamples,validateSamples,testSamples]=dividevec(normInput,normTarget,validatePercent,testPercent); % 3. 训练样本数据归一化 [inputn,inputps]=mapminmax(trainSamples.P); % 归一化到[-1,1]之间,inputps用来作下一次同样的归一化 [outputn,outputps]=mapminmax(trainSamples.T); % 4. 构建神经网络 % 节点个数 inputnum=2; hiddenum=5; % 隐含层节点数量经验公式p=sqrt(m+n)+a,故分别取2~13进行试验 outputnum=1; % 构建BP神经网络 net=newff(inputn,outputn,hiddenum,{'tansig','purelin'},'trainlm');% 建立模型,传递函数使用purelin,采用梯度下降法训练 w1=net.iw{1,1} ;%输入层到中间层的权值 B1=net.b{1} ;% 中间各层神经元阈值 w2=net.lw{2,1} ;%中间层到输出层的权值 B2=net.b{2}; %输出层各神经元阈值 % 5. 网络参数配置(训练次数,学习速率,训练目标最小误差等) net.trainParam.epochs=1000; % 训练次数,这里设置为1000次 net.trainParam.lr=0.01;% 学习速率,这里设置为0.01 net.trainParam.goal=0.00001; %训练目标最小误差,这里设置为0.00001 % 6. BP神经网络训练 net=train(net,inputn,outputn);% 开始训练,其中inputn,outputn分别是输入输出样本 % 7. 验证样本归一化 inputn_validation=mapminmax('apply',validateSamples.P,inputps);%对验证样本进行归一化 % 8. BP神经网络预测 an=sim(net,inputn_validation);% 用训练好的模型进行仿真 % 9. 预测结果反归一化与误差计算 validation_simu=mapminmax('reverse',an,outputps);% 把仿真结果得到的数据还原为原始的数量集 error=validation_simu-validateSamples.T;%预测值与真实值的误差 % 10. 真实值与预测值误差的比较 figure(1) plot(validateSamples.T,'bo-') hold on plot(validation_simu,'r*-') hold on plot(error,'square','MarkerFaceColor','b') legend('期望值','预测值','误差') xlabel('数据组数') ylabel('值') [c,l]=size(validateSamples.T); MAE1=sum(abs(error./validateSamples.T))/l; MSE1=error*error'/l; RMSE1=MSE1^(1/2); disp(['-----------------------误差计算--------------------------']) disp(['隐含层节点数为',num2str(hiddenum),'时的误差结果如下:']) disp(['平均绝对误差MAE为:',num2str(MAE1)]) disp(['均方误差MSE为: ',num2str(MSE1)]) disp(['均方根误差RMSE为: ',num2str(RMSE1)])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。