㈠ matlab BP神经网络出错 newff参数 隐含层 怎么确定
设[P,T]是训练样本,[X,Y]是测试样本;
net=newrb(P,T,err_goal,spread); %建立网络
q=sim(net,p);
e=q-T;
plot(p,q); %画训练误差曲线
q=sim(net,X);
e=q-Y;
plot(X,q); %画测试误差曲线
训练前馈网络的第一步是建立网络对象。函数newff建立一个可训练的前馈网络。这需要4个输入参数。
第一个参数是一个Rx2的矩阵以定义R个输入向量的最小值和最大值。
第二个参数是一个设定每层神经元个数的数组。
第三个参数是包含每层用到的传递函数名称的细胞数组。
最后一个参数是用到的训练函数的名称。
举个例子,下面命令将创建一个二层网络。它的输入是两个元素的向量,第一层有三个神经元(3),第二层有一个神经元(1)。
第一层的传递函数是tan-sigmoid,输出层的传递函数是linear。
输入向量的第一个元素的范围是-1到2[-1 2],输入向量的第二个元素的范围是0到5[0 5],训练函数是traingd。
net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');
这个命令建立了网络对象并且初始化了网络权重和偏置,因此网络就可以进行训练了。
我们可能要多次重新初始化权重或者进行自定义的初始化。
下面就是初始化的详细步骤。
在训练前馈网络之前,权重和偏置必须被初始化。初始化权重和偏置的工作用命令init来实现。这个函数接收网络对象并初始化权重和偏置后返回网络对象。
下面就是网络如何初始化的:
net = init(net);
我们可以通过设定网络参数net.initFcn和net.layer{i}.initFcn这一技巧来初始化一个给定的网络。
net.initFcn用来决定整个网络的初始化函数。前馈网络的缺省值为initlay,它允许每一层用单独的初始化函数。
设定了net.initFcn ,那么参数net.layer{i}.initFcn 也要设定用来决定每一层的初始化函数。
对前馈网络来说,有两种不同的初始化方式经常被用到:initwb和initnw。initwb函数根据每一层自己的初始化参数(net.inputWeights{i,j}.initFcn)初始化权重矩阵和偏置。前馈网络的初始化权重通常设为rands,它使权重在-1到1之间随机取值。这种方式经常用在转换函数是线性函数时。initnw通常用于转换函数是曲线函数。它根据Nguyen和Widrow[NgWi90]为层产生初始权重和偏置值,使得每层神经元的活动区域能大致平坦的分布在输入空间。
㈡ 请问大神:函数拟合神经网络(fitnet)是BP神经网络吗在线等待中。
是BP神经网络,是一个只有一个隐含层的的BP神经网络。
tansig和purelin作为传递函数
另外需要指出的是,在建立的神经网络中,权重和阈值是归一化后的参数使用的权重和阈值,归一化的过程是在fitnet()函数中进行的。
具体的问题可以使用下面的代码来加深理解。
clear
clc
[x,t] = simplefit_dataset;
net = fitnet(10);
net = train(net,x,t);
y = net(x); %x为输入,t为输出
%获取模型参数
w1= net.iw{1,1};
b1=net.b{1};
w2 = net.lw{2,1};
b2=net.b{2};
%%%查看网络的传递函数
ss=net.layers{1}.transferFcn;
sw=net.layers{2}.transferFcn;
x1=mapminmax(x); %x1为原始数据归一化后的输入数据
[t1,ps]=mapminmax(t); %t1为原始数据归一化后的输出数据
t11=w2*(tansig(w1*x1+b1))+b2; %t11为神经网络求取的归一化输出数据
t12=mapminmax('reverse',t11,ps); %t12为使用模型参数并且反归一化后的输出数据
㈢ BP神经网络的传递函数选择有什么特定要求我使用高斯函数作为其传递函数(激活函数)可行麽
既然是BP神经网络,当然激励函数就已经基本确定,因为,BP神经网络的隐含层一般是logsig函数,而输出层为线性函数。
㈣ 在神经网络使用elu激活函数时怎么使用交叉熵作为损失函数
P、T矩阵均为一列为一个样本,因此P、T的列数必须相等,否则报错。你参考下别人的程序,我建议使用newff函数,不要弄得这么复杂。还有P、T的生成不需要那么复杂,只需要:P(i,:)=YY(i:i+2);附上newff函数的格式为:net=newff(PR,[S1S2SN],{TF1TF2TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;Si:第i层神经元个数;TFi:第i层的传递函数,默认函数为tansig函数;BTF:训练函数,默认函数为trainlm函数;BLF:权值/阀值学习函数,默认函数为learngdm函数;PF:性能函数,默认函数为mse函数。
㈤ BP神经网络原理
人工神经网络有很多模型,但是日前应用最广、基本思想最直观、最容易被理解的是多层前馈神经网络及误差逆传播学习算法(Error Back-Prooaeation),简称为BP网络。
在1986年以Rumelhart和McCelland为首的科学家出版的《Parallel Distributed Processing》一书中,完整地提出了误差逆传播学习算法,并被广泛接受。多层感知网络是一种具有三层或三层以上的阶层型神经网络。典型的多层感知网络是三层、前馈的阶层网络(图4.1),即:输入层、隐含层(也称中间层)、输出层,具体如下:
图4.1 三层BP网络结构
(1)输入层
输入层是网络与外部交互的接口。一般输入层只是输入矢量的存储层,它并不对输入矢量作任何加工和处理。输入层的神经元数目可以根据需要求解的问题和数据表示的方式来确定。一般而言,如果输入矢量为图像,则输入层的神经元数目可以为图像的像素数,也可以是经过处理后的图像特征数。
(2)隐含层
1989年,Robert Hecht Nielsno证明了对于任何在闭区间内的一个连续函数都可以用一个隐层的BP网络来逼近,因而一个三层的BP网络可以完成任意的n维到m维的映射。增加隐含层数虽然可以更进一步的降低误差、提高精度,但是也使网络复杂化,从而增加了网络权值的训练时间。误差精度的提高也可以通过增加隐含层中的神经元数目来实现,其训练效果也比增加隐含层数更容易观察和调整,所以一般情况应优先考虑增加隐含层的神经元个数,再根据具体情况选择合适的隐含层数。
(3)输出层
输出层输出网络训练的结果矢量,输出矢量的维数应根据具体的应用要求来设计,在设计时,应尽可能减少系统的规模,使系统的复杂性减少。如果网络用作识别器,则识别的类别神经元接近1,而其它神经元输出接近0。
以上三层网络的相邻层之间的各神经元实现全连接,即下一层的每一个神经元与上一层的每个神经元都实现全连接,而且每层各神经元之间无连接,连接强度构成网络的权值矩阵W。
BP网络是以一种有教师示教的方式进行学习的。首先由教师对每一种输入模式设定一个期望输出值。然后对网络输入实际的学习记忆模式,并由输入层经中间层向输出层传播(称为“模式顺传播”)。实际输出与期望输出的差即是误差。按照误差平方最小这一规则,由输出层往中间层逐层修正连接权值,此过程称为“误差逆传播”(陈正昌,2005)。所以误差逆传播神经网络也简称BP(Back Propagation)网。随着“模式顺传播”和“误差逆传播”过程的交替反复进行。网络的实际输出逐渐向各自所对应的期望输出逼近,网络对输入模式的响应的正确率也不断上升。通过此学习过程,确定下各层间的连接权值后。典型三层BP神经网络学习及程序运行过程如下(标志渊,2006):
(1)首先,对各符号的形式及意义进行说明:
网络输入向量Pk=(a1,a2,...,an);
网络目标向量Tk=(y1,y2,...,yn);
中间层单元输入向量Sk=(s1,s2,...,sp),输出向量Bk=(b1,b2,...,bp);
输出层单元输入向量Lk=(l1,l2,...,lq),输出向量Ck=(c1,c2,...,cq);
输入层至中间层的连接权wij,i=1,2,...,n,j=1,2,...p;
中间层至输出层的连接权vjt,j=1,2,...,p,t=1,2,...,p;
中间层各单元的输出阈值θj,j=1,2,...,p;
输出层各单元的输出阈值γj,j=1,2,...,p;
参数k=1,2,...,m。
(2)初始化。给每个连接权值wij、vjt、阈值θj与γj赋予区间(-1,1)内的随机值。
(3)随机选取一组输入和目标样本
(4)用输入样本
基坑降水工程的环境效应与评价方法
bj=f(sj) j=1,2,...,p (4.5)
(5)利用中间层的输出bj、连接权vjt和阈值γt计算输出层各单元的输出Lt,然后通过传递函数计算输出层各单元的响应Ct。
基坑降水工程的环境效应与评价方法
Ct=f(Lt) t=1,2,...,q (4.7)
(6)利用网络目标向量
基坑降水工程的环境效应与评价方法
(7)利用连接权vjt、输出层的一般化误差dt和中间层的输出bj计算中间层各单元的一般化误差
基坑降水工程的环境效应与评价方法
(8)利用输出层各单元的一般化误差
基坑降水工程的环境效应与评价方法
(9)利用中间层各单元的一般化误差
基坑降水工程的环境效应与评价方法
(10)随机选取下一个学习样本向量提供给网络,返回到步骤(3),直到m个训练样本训练完毕。
(11)重新从m个学习样本中随机选取一组输入和目标样本,返回步骤(3),直到网路全局误差E小于预先设定的一个极小值,即网络收敛。如果学习次数大于预先设定的值,网络就无法收敛。
(12)学习结束。
可以看出,在以上学习步骤中,(8)、(9)步为网络误差的“逆传播过程”,(10)、(11)步则用于完成训练和收敛过程。
通常,经过训练的网络还应该进行性能测试。测试的方法就是选择测试样本向量,将其提供给网络,检验网络对其分类的正确性。测试样本向量中应该包含今后网络应用过程中可能遇到的主要典型模式(宋大奇,2006)。这些样本可以直接测取得到,也可以通过仿真得到,在样本数据较少或者较难得到时,也可以通过对学习样本加上适当的噪声或按照一定规则插值得到。为了更好地验证网络的泛化能力,一个良好的测试样本集中不应该包含和学习样本完全相同的模式(董军,2007)。
㈥ 用MATLAB建立bp神经网络模型,求高手,在线等
Matlab神经网络工具箱提供了一系列用于建立和训练bp神经网络模型的函数命令,很难一时讲全。下面仅以一个例子列举部分函数的部分用法。更多的函数和用法请仔细查阅Neural Network Toolbox的帮助文档。
例子:利用bp神经网络模型建立z=sin(x+y)的模型并检验效果
%第1步。随机生成200个采样点用于训练
x=unifrnd(-5,5,1,200);
y=unifrnd(-5,5,1,200);
z=sin(x+y);
%第2步。建立神经网络模型。其中参数一是输入数据的范围,参数二是各层神经元数量,参数三是各层传递函数类型。
N=newff([-5 5;-5 5],[5,5,1],{'tansig','tansig','purelin'});
%第3步。训练。这里用批训练函数train。也可用adapt函数进行增长训练。
N=train(N,[x;y],z);
%第4步。检验训练成果。
[X,Y]=meshgrid(linspace(-5,5));
Z=sim(N,[X(:),Y(:)]');
figure
mesh(X,Y,reshape(Z,100,100));
hold on;
plot3(x,y,z,'.')