秒懂神经网络---BP神经网络具体应用不能说的秘密
一、总结
一句话总结:
还是要上课和自己找书找博客学习相结合,这样学习效果才好,不能单视频,也不能单书
BP神经网络就是反向传播神经网络
1、BP神经网络是什么?
反向传播神经网络:通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。
BP网络(Back-ProPagation Network)又称反向传播神经网络, 通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。它是一种应用较为广泛的神经网络模型,多用于函数逼近、模型识别分类、数据压缩和时间序列预测等。
2、BP神经网络有哪些层?
三层:输入层、隐层和输出层,隐层可以有一层或多层
3、BP神经网络的优缺点有哪些?
有高度非线性和较强的泛化能力:优点
收敛速度慢、迭代步数多、易于陷入局部极小和全局搜索能力差:缺点
4、BP神经网络的解题思路?
遗传算法找搜索空间:先用遗传算法对“BP网络”进行优化在解析空间找出较好的搜索空间
BP网络找最优解:再用BP网络在较小的搜索空间内搜索最优解
5、神经网络中隐藏层的意义?
以任意精度逼近一个非线性函数:有关研究表明, 有一个隐层的神经网络, 只要隐节点足够多, 就可以以任意精度逼近一个非线性函数。
6、神经网络的数学本质是什么?
就是找函数:找一个满足输入到输出的复杂关系的函数
7、为什么隐藏层神经元数量的确定十分重要?
多易过度拟合:隐层神经元个数过多, 会加大网络计算量并容易产生过度拟合问题;
少达不到效果:神经元个数过少, 则会影响网络性能, 达不到预期效果。
8、如何确定隐藏层神经元的数量?
实际问题:网络中隐层神经元的数目与实际问题的复杂程度、输入和输出层的神经元数以及对期望误差的设定有着直接的联系。
经验公式:l=(n+m)^(1/2)+a; n为输入层神经元个数, m为输出层神经元个数, a为[ 1, 10]之间的常数。
9、BP神经网络如何选取激励函数?
S(x)=e^x/(1+e^x):采用Sigmoid可微函数和线性函数作为网络的激励函数。
本文选择S型正切函数tansig作为隐层神经元的激励函数。而由于网络的输出归一到[ -1, 1]范围内, 因此预测模型选取S 型对数函数tansig作为输出层神经元的激励函数。
二、数据预测之BP神经网络具体应用以及matlab代码(转)
转自:数据预测之BP神经网络具体应用以及matlab代码
https://www.cnblogs.com/sallybin/p/3169572.html
1.具体应用实例。根据表2,预测序号15的跳高成绩。
表2 国内男子跳高运动员各项素质指标
序号 | 跳高成绩() | 30行进跑(s) | 立定三级跳远() | 助跑摸高() | 助跑4—6步跳高() | 负重深蹲杠铃() | 杠铃半蹲系数 | 100 (s) | 抓举 () |
1 | 2.24 | 3.2 | 9.6 | 3.45 | 2.15 | 140 | 2.8 | 11.0 | 50 |
2 | 2.33 | 3.2 | 10.3 | 3.75 | 2.2 | 120 | 3.4 | 10.9 | 70 |
3 | 2.24 | 3.0 | 9.0 | 3.5 | 2.2 | 140 | 3.5 | 11.4 | 50 |
4 | 2.32 | 3.2 | 10.3 | 3.65 | 2.2 | 150 | 2.8 | 10.8 | 80 |
5 | 2.2 | 3.2 | 10.1 | 3.5 | 2 | 80 | 1.5 | 11.3 | 50 |
6 | 2.27 | 3.4 | 10.0 | 3.4 | 2.15 | 130 | 3.2 | 11.5 | 60 |
7 | 2.2 | 3.2 | 9.6 | 3.55 | 2.1 | 130 | 3.5 | 11.8 | 65 |
8 | 2.26 | 3.0 | 9.0 | 3.5 | 2.1 | 100 | 1.8 | 11.3 | 40 |
9 | 2.2 | 3.2 | 9.6 | 3.55 | 2.1 | 130 | 3.5 | 11.8 | 65 |
10 | 2.24 | 3.2 | 9.2 | 3.5 | 2.1 | 140 | 2.5 | 11.0 | 50 |
11 | 2.24 | 3.2 | 9.5 | 3.4 | 2.15 | 115 | 2.8 | 11.9 | 50 |
12 | 2.2 | 3.9 | 9.0 | 3.1 | 2.0 | 80 | 2.2 | 13.0 | 50 |
13 | 2.2 | 3.1 | 9.5 | 3.6 | 2.1 | 90 | 2.7 | 11.1 | 70 |
14 | 2.35 | 3.2 | 9.7 | 3.45 | 2.15 | 130 | 4.6 | 10.85 | 70 |
15 | 3.0 | 9.3 | 3.3 | 2.05 | 100 | 2.8 | 11.2 | 50 |
4.4 (序号15)跳高成绩预测
4.4.1 数据整理
1)我们将前14组国内男子跳高运动员各项素质指标作为输入,即(30m行进跑,立定三级跳远,助跑摸高,助跑4-6步跳高,负重深蹲杠铃,杠铃半蹲系数,100m,抓举),将对应的跳高成绩作为输出。并用matlab自带的premnmx()函数将这些数据归一化处理。
数据集:(注意:每一列是一组输入训练集,行数代表输入层神经元个数,列数输入训练集组数)
P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;
9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;
3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;
2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;
140 120 140 150 80 130 130 100 130 140 115 80 90 130;
2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;
11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;
50 70 50 80 50 60 65 40 65 50 50 50 70 70];
T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];
4.4.2 模型建立
4.4.2.1 BP网络模型
BP网络(Back-ProPagation Network)又称反向传播神经网络, 通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。它是一种应用较为广泛的神经网络模型,多用于函数逼近、模型识别分类、数据压缩和时间序列预测等。
BP网络由输入层、隐层和输出层组成,隐层可以有一层或多层,图2是m×k×n的三层BP网络模型,网络选用S型传递函数, 通过反传误差函数 ( (Ti为期望输出、Oi为网络的计算输出),不断调节网络权值和阈值使误差函数E达到极小。
BP网络具有高度非线性和较强的泛化能力,但也存在收敛速度慢、迭代步数多、易于陷入局部极小和全局搜索能力差等缺点。可以先用遗传算法对“BP网络”进行优化在解析空间找出较好的搜索空间,再用BP网络在较小的搜索空间内搜索最优解。
4.4.2.2 模型求解
4.4.2.2.1 网络结构设计
1) 输入输出层的设计
该模型由每组数据的各项素质指标作为输入,以跳高成绩作为输出,所以输入层的节点数为8,输出层的节点数为1。
2) 隐层设计
有关研究表明, 有一个隐层的神经网络, 只要隐节点足够多, 就可以以任意精度逼近一个非线性函数。因此, 本文采用含有一个隐层的三层多输入单输出的BP网络建立预测模型。在网络设计过程中, 隐层神经元数的确定十分重要。隐层神经元个数过多, 会加大网络计算量并容易产生过度拟合问题; 神经元个数过少, 则会影响网络性能, 达不到预期效果。网络中隐层神经元的数目与实际问题的复杂程度、输入和输出层的神经元数以及对期望误差的设定有着直接的联系。目前, 对于隐层中神经元数目的确定并没有明确的公式, 只有一些经验公式, 神经元个数的最终确定还是需要根据经验和多次实验来确定。本文在选取隐层神经元个数的问题上参照了以下的经验公式:
其中, n为输入层神经元个数, m 为输出层神经元个数, a 为[ 1, 10]之间的常数。
根据上式可以计算出神经元个数为4-13个之间,在本次实验中选择隐层神经元个数为6.
网络结构示意图如下:
4.4.2.2.2 激励函数的选取
BP神经网络通常采用Sigmoid可微函数和线性函数作为网络的激励函数。本文选择S型正切函数tansig作为隐层神经元的激励函数。而由于网络的输出归一到[ -1, 1]范围内, 因此预测模型选取S 型对数函数tansig作为输出层神经元的激励函数。
4.4.2.2.3 模型的实现
此次预测选用MATLAB中的神经网络工具箱进行网络的训练, 预测模型的具体实现步骤如下:
将训练样本数据归一化后输入网络, 设定网络隐层和输出层激励函数分别为tansig和logsig函数, 网络训练函数为traingdx, 网络性能函数为mse,隐层神经元数初设为6。设定网络参数。网络迭代次数epochs为5000次, 期望误差goal为0.00000001, 学习速率lr为0. 01。设定完参数后, 开始训练网络。
该网络通过24次重复学习达到期望误差后则完成学习。详细代码见附录。
网络训练完成后,只需要将各项素质指标输入网络即可得到预测数据。
预测结果为:2.20
matlab代码:
- ?P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;
- 9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;
- 3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;
- 2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;
- 140 120 140 150 80 130 130 100 130 140 115 80 90 130;
- 2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;
- 11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;
- 50 70 50 80 50 60 65 40 65 50 50 50 70 70];
- ?T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];
- ?[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);
- ?%创建网络
- ?net=newff(minmax(P),[8,6,1],{'tansig','tansig','purelin'},'trainlm');
- ?%设置训练次数
- ?net.trainParam.epochs = 5000;
- ?%设置收敛误差
- ?net.trainParam.goal=0.0000001;
- ?%训练网络
- ?[net,tr]=train(net,p1,t1);
- TRAINLM, Epoch 0/5000, MSE 0.533351/1e-007, Gradient 18.9079/1e-010
- TRAINLM, Epoch 24/5000, MSE 8.81926e-008/1e-007, Gradient 0.0022922/1e-010
- TRAINLM, Performance goal met.
-
- ?%输入数据
- ?a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50];
- ?%将输入数据归一化
- ?a=premnmx(a);
- ?%放入到网络输出数据
- ?b=sim(net,a);
- ?%将得到的数据反归一化得到预测数据
- ?c=postmnmx(b,mint,maxt);
- ?c
-
- c =
-
- 2.2003