非常感谢博主wishes61的分享。这篇博客只是为了记录下第一个神经网络的训练。

BP神经网络代码实现

  • 1. BP神经网络的简介和结构参数
    • 1.1 BP神经网络的结构组成
    • 1.2 神经元结构示意图
    • 1.3 BP神经网络训练界面的参数解读
  • 2. BP网络训练的步骤
  • 3. IRIS数据集
  • 4. MATLAB代码编写
  • 4. 运行结果
    • 4.1预测值,真实值,误差的分析图像
    • 4.2 预测值和真实值的误差计算(MAE,MSE,MRSE)

1. BP神经网络的简介和结构参数

  • 一种按照误差逆向传播算法训练的多层前馈神经网络用于预测BP神经网络的计算过程:由正向计算过程和反向计算过程组成。
  • 正向传播过程,输入模式从输入层经隐单元层逐层处理,并转向输出层,每一层神经元的状态只影响下一层神经元的状态。
  • 如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小值。

1.1 BP神经网络的结构组成


下图是训练神经网络时经常出现的一个界面,从这部分我们可以看到,这是一个2输入1输出,5个隐含层的BP网络,称为2-5-1网络结构

1.2 神经元结构示意图




1.3 BP神经网络训练界面的参数解读

需要注意的是:

  • 泛化性: 表示BP神经网络在训练过程中,如果均方误差(MSE)连续6次不降反升,则网络停止训练
  • 误差精度: 关于mu参数含义的一种理解是,mu是误差精度参数,用于给神经网络的权重再加一个调制,这样可以避免在BP网络训练的过程中陷入局部最小值,mu的范围为0到1。

2. BP网络训练的步骤

  • 读取数据
  • 设置训练数据和预测数据
  • 训练样本数据归一化
  • 构建BP神经网络 网络参数配置(训练次数,学习速率,训练目标最小误差.等)
  • BP神经网络训练
  • 测试样本归一化
  • BP神经网络预测
  • 预测结果反归一化与误差计算
  • 验证集的真实值与预测值误差比较

3. IRIS数据集

  • iris是鸢尾花数据集,是一类多重变量分析的数据集。
  • 数据集包含150个数据样本,分为3类,酶类50个数据,每个数据包含4个属性。
  • 可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
    数据下载链接:http://archive.ics.uci.edu/ml/index.php

4. MATLAB代码编写

% 清空环境变量
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)])

4. 运行结果

4.1预测值,真实值,误差的分析图像

4.2 预测值和真实值的误差计算(MAE,MSE,MRSE)




MATLAB_第二篇神经网络学习_BP神经网络相关推荐

  1. 神经网络学习:神经网络节点配置

    在这篇文章中,你将了解两个重要的超参数,用于控制网络的体系结构或拓扑:层数和每个隐藏层中的节点数.配置网络时,必须指定这些参数的值,以及如何着手为你的预测建模问题配置多层感知器神经网络. 在这里贴上教 ...

  2. Egret入门学习日记 --- 第二篇

    第二篇(学习篇) 既然选好了Egret,那我就要想想怎么学了. 开始第一步,先加个Q群先,这不,拿到了一本<Egret  HTML5游戏开发指南>,阅至三章,得到印象相对较深的好处和坏处: ...

  3. 【MATLAB】神经网络学习

    NNTOOL 神经网络学习函数 神经网络传递函数 神经网络学习函数 learnp函数[默认] [dW,LS] = leanrp(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) dW为权值变化 ...

  4. 神经网络如何入门,神经网络训练流程

    (1)BP算法的学习过程中有两个过程是什么?(2)写出BP神经网络的数学模型,并以20 bp(backpropagation)网络是1986年由rumelhart和mccelland为首的科学家小组提 ...

  5. 吴恩达神经网络1-2-2_图神经网络进行药物发现-第2部分

    吴恩达神经网络1-2-2 预测毒性 (Predicting Toxicity) 相关资料 (Related Material) Jupyter Notebook for the article Jup ...

  6. 深度学习笔记第二门课 改善深层神经网络 第一周:深度学习的实践层面

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  7. 1.1 训练/开发/测试集-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 4.9 总结习题 (第一课) 回到目录 1.2 偏差/方差 训练/开发/测试集 (Train/Dev/Test Sets) 大家可能已经了解了,那么本周,我们将继续学习如何有 ...

  8. 深度学习系列 -- 第二门课 改善深层神经网络:超参数调试、正则化以及优化(一):深度学习的实践层面(Practical aspects of Deep Learning)

    目录 一.深度学习的实践层面(Practical aspects of Deep Learning) 1 训练,验证,测试集(Train / Dev / Test sets) 2 偏差,方差(Bias ...

  9. 神经网络学习小记录-番外篇——常见问题汇总

    神经网络学习小记录-番外篇--常见问题汇总 前言 问题汇总 1.下载问题 a.代码下载 b. 权值下载 c. 数据集下载 2.环境配置问题 a.20系列所用的环境 b.30系列显卡环境配置 c.CPU ...

最新文章

  1. 盘点Java框架常用的3大底层技术!
  2. 如何将qlv格式倚天屠龙记转换为MP4格式
  3. 让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别
  4. 在Ubuntu 10.10下安装JDK配置Eclipse及Tomcat
  5. PHP - 解决中文乱码问题
  6. 面试lua笔试题各种坑
  7. 通过扫码自定义链接安装iOS app,版本更新总结。
  8. 重磅开源|AOP for Flutter开发利器——AspectD
  9. 2021年快手大健康行业数据价值报告
  10. java 分卷 zip
  11. bzoj千题计划176:bzoj1199: [HNOI2005]汤姆的游戏
  12. 苏大计算机考研专业课,苏州大学计算机考研初试经验分享
  13. PhotoScissors 6 for Mac(mac抠图软件)
  14. BZOJ 4173 数学 数论
  15. C语言中数组和字符串长度以及输入输出详解
  16. Linux rm -rf * 文件恢复记
  17. 从零开始学python的第14天
  18. 一些前端入门者可能需要的网站
  19. 长征路上的益友——好的名人博客地址
  20. 面向园区网的全数字化网络架构 - Cisco DNA介绍

热门文章

  1. 安装IDEA的教程以及配置JDK环境变量
  2. python 图像压缩 jpeg_python中原始图像的jpeg解压缩
  3. vue项目中img使用svg图片修改颜色
  4. 本科计算机 在职研究生想读英语,计算机在职研究生英语如何学习
  5. Scrcpy - 开源免费投屏控制软件
  6. 云时代数据安全才是真正的安全 —— 天空卫士 副总裁 巩文坚
  7. SpringBoot启动tomcat出现空白页面
  8. 基于KNN-凸包提取轮廓点(matlab源码及示例)
  9. Mac Kettle闪崩或秒退处理
  10. nodeJS项目创建