非常感谢博主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. safari post 请求接收不到_我是谁?我在哪?我要到哪去?——HTTP请求头
  2. 英语影视台词---四、Sideways
  3. 【深度学习】讲一个深度分离卷积结构和空洞卷积的应用
  4. 机器学习100天:专栏目录
  5. Effective Java读书笔记完结啦
  6. 前端学习(627):数据类型
  7. 知识点2-1:设置开发环境
  8. phpcms 后台设置 posid 推荐位(支持多选) - 教程篇
  9. 中秋快乐:数据库的全家福喜添新员
  10. 《Python程序设计基础》在亚马逊当当京东互动出版网淘宝等各大书店上架
  11. 删除8848的mysearch
  12. mysql建立外键案例_MySQL外键实例
  13. vim使用方法的总结摘自鸟哥的私房菜
  14. 写给初学者:电气制图规范和图纸识读方法——第三期
  15. winhttp 访问https_VB6: 在客户端中使用WinHttp组件,发送Https请求
  16. 学习python基础(六)
  17. 影视处理计算机配置,影视后期制作电脑配置需要什么
  18. macOs 静默安装dmg文件
  19. 大数据背后的神秘公式(上):贝叶斯公式
  20. Unity3d学习记录之回合制游戏

热门文章

  1. c语言中字符串关于左值,关于左值lvalue和右值rvalue的一点理解
  2. CSS3之安卓小头像制作
  3. 肇庆学院计算机专业分数线,肇庆学院2016年录取分数线
  4. 关于非标准数学的感想
  5. sklearn预测评估指标计算详解:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1score
  6. 基于stm32mp157 linux开发板ARM裸机开发教程3:Cortex-A7 架构与工作模式(连载中)
  7. 通证网【2022】一级注册消防工程报名日期通知
  8. oracle中更改表名语句,转:取Oracle 表名 字段名 注释等实用语句
  9. 正确理解二阶段提交(Two-Phase Commit)
  10. 通信工程师给儿子的信2:为什么铜线能导电?