netIW 属性定义了从网络输入向量到网络层的权值向量(即输入层的权值向量)结构。其值为NlNi的细胞矩阵,Nl为网络层数(netnumLayers),Ni为输入向量数(netnumInputs)。通过访问netIW{i,j},可以获得第i 个网络层来自第j 个输入向量的权值向量值。 所以一般情况下net,iw{1,1}就是输入层和隐含层之间的权值。
netLW定义了从一个网络层到另一个网络层的权值向量结构。其值为NlNl的细胞矩阵,Nl为网络层数(netnumLayers)。通过访问netLW{i,j},可以获得第i 个网络层来自第j 个网络层的权值向量值。 因此,如果网络是单隐含层,netlw{2,1}就是输出层和隐含层之间的权值。
最需要理解的就是:这都是元胞数组。
对y=x1^2+x2^2非线性系统进行建模,用1500组数据对网络进行构建网络,500组数据测试网络。由于BP神经网络初始神经元之间的权值和阈值一般随机选择,因此容易陷入局部最小值。本方法使用遗传算法优化初始神经元之间的权值和阈值,并对比使用遗传算法前后的效果。
步骤:
未经遗传算法优化的BP神经网络建模
1、
随机生成2000组两维随机数(x1,x2),并计算对应的输出y=x1^2+x2^2,前1500组数据作为训练数据input_train,后500组数据作为测试数据input_test。并将数据存储在data中待遗传算法中使用相同的数据。
2、
数据预处理:归一化处理。
3、
构建BP神经网络的隐层数,次数,步长,目标。
4、
使用训练数据input_train训练BP神经网络net。
因为初始权值和阈值是随机产生的。
神经网络每次结果不同是因为初始化的权值和阈值是随机的,因为每次的结果不一样,才有可能找到比较理想的结果,找到比较好的结果后,用命令save filename net;保存网络,可使预测的结果不会变化,调用时用命令load filename net;
优劣势:
BP神经网络无论在网络理论还是在性能方面已比较成熟。其突出优点就是具有很强的非线性映射能力和柔性的网络结构。网络的中间层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。但是BP神经网络也存在以下的一些主要缺陷。
①学习速度慢,即使是一个简单的问题,一般也需要几百次甚至上千次的学习才能收敛。
②容易陷入局部极小值。
③网络层数、神经元个数的选择没有相应的理论指导。
④网络推广能力有限。
对于上述问题,目前已经有了许多改进措施,研究最多的就是如何加速网络的收敛速度和尽量避免陷入局部极小值的问题。
例采用动量梯度下降算法训练BP网络。
训练样本定义如下:
输入矢量为
p =[-1 -2 3 1
-1 1 5 -3]
目标矢量为 t = [-1 -1 1 1]
解:本例的MATLAB程序如下:
close all
clear
echo on
clc
% NEWFF——生成一个新的前向神经网络
% TRAIN——对BP神经网络进行训练
% SIM——对BP神经网络进行仿真
pause
% 敲任意键开始
clc
% 定义训练样本
% P为输入矢量
P=[-1, -2, 3, 1; -1, 1, 5, -3];
% T为目标矢量
T=[-1, -1, 1, 1];
pause;
clc
% 创建一个新的前向神经网络
net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')
% 当前输入层权值和阈值
inputWeights=netIW{1,1}
inputbias=netb{1}
% 当前网络层权值和阈值
layerWeights=netLW{2,1}
layerbias=netb{2}
pause
clc
% 设置训练参数
nettrainParamshow = 50;
nettrainParamlr = 005;
nettrainParammc = 09;
nettrainParamepochs = 1000;
nettrainParamgoal = 1e-3;
pause
clc
% 调用TRAINGDM算法训练BP网络
[net,tr]=train(net,P,T);
pause
clc
% 对BP网络进行仿真
A = sim(net,P)
% 计算仿真误差
E = T - A
MSE=mse(E)
pause
clc
echo off
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)