MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   深度神经网络/深度学习 (https://www.labfans.com/bbs/forumdisplay.php?f=45)
-   -   熟悉 bp神经网络编程的进来看看 (https://www.labfans.com/bbs/showthread.php?t=9975)

lzroc 2009-10-23 14:17

熟悉 bp神经网络编程的进来看看
 
我用matlab(2008b)做bp神经网络作业,从[0,2*pi]取九个样本点,期望输出是样本点的正弦值。在训练的过程中,出现了好多NaN,不知道是什么问题,求高手帮忙。具体情况如下:
********************************************************************

%利用一个单输入单输出的两层bp网络训练一个输入为0到2*pi的9个样本点,期望的输出均为所取样本正弦函数值的神经网络系统,隐含层激活函数取Sigmoid函数,输出层取线性函数。(一个输入层,一个有4个神经元的隐含层,一个输出层)
%bp网络的第一阶段学习期(训练加权系数wki,wij)
%初始化
lr=0.5;%学习效率
err_goal=0.001;%期望误差最小值
max_epoch=10000;%训练的最大次数
a=0.7;%惯性系数
Oi=0;%置隐含层和输出层个神经元输出初值为零
Ok=0;
%提供9组训练集和目标值(1输入,1输出)
X=linspace(0,2*pi,9);
T=sin(X);
%初始化wki,wij(M为输入节点j的数量;q为隐含层节点i的数量;L为输出节点k的数量)
[M,N]=size(X);
q=4;
[L,N]=size(T);%N为训练集对数量
wij=rand(q,M);
wki=rand(L,q);
wij0=zeros(size(wij));
wki0=zeros(size(wki));
for epoch=1:max_epoch
%计算隐含层各神经元输出
NETi=wij*X;
for j=1:N
for i=1:q
Oi(i,j)=1/(1+exp(-NETi(i,j)));
end
end
%计算输出层个神经元输出
NETk=wki*Oi;
for i=1:N
for k=1:L
Ok(k,i)=NETk(k,i);
end
end

%计算输出误差函数
E=sum((T-Ok).^2)/2;
if(E<err_goal)break;end
%调整输出层加权系数
deltak=Ok.*(1-Ok).*(T-Ok);
w=wki;
wki=wki+lr*deltak*Oi'+a*(wki-wki0);
wki0=w;
%调整隐含层加权系数
deltai=Oi.*(1-Oi).*(deltak'*wki)';
w=wij;
wij=wij+lr*deltai*X'+a*(wij-wij0);
wij0=w;
end
epoch%显示计算次数
plot(E,epoch)%显示误差随训练次数的走向



********************************************************************
遇到问题就是:wij,wki,wij0,wki0,deltak,NETk,Ok,E。全都是NaN,不知道怎么回事,应该怎么处理。还有,最后显示的误差曲线图是空白的。
希望高手帮忙解决问题,感激不尽。
Ps:我还是新手,接触matlab不是很久。

jessicas071 2009-10-23 15:01

回复: 熟悉 bp神经网络编程的进来看看
 
没看到你建立神经网络的语句,比如net=newff(minmax(P),[21,2],{'tansig','purelin'},'trainlm');

lzroc 2009-10-23 19:05

回复: 熟悉 bp神经网络编程的进来看看
 
[QUOTE=jessicas071;32491]没看到你建立神经网络的语句,比如net=newff(minmax(P),[21,2],{'tansig','purelin'},'trainlm');[/QUOTE]

你好 ,我不是用工具箱的,就是一个M文件程序。

chenweibit 2009-11-16 22:50

回复: 熟悉 bp神经网络编程的进来看看
 
你单步调试过吗?单步调试显示你的wki和deltai交替无限增长,应该是某个公式用错了吧,(初步意见)

gongyonghui2 2010-09-15 18:04

回复: 熟悉 bp神经网络编程的进来看看
 
最大迭代次数作为终止条件你貌似最后没用到

一只孤独的小蚂蚁 2013-04-02 16:30

回复: 熟悉 bp神经网络编程的进来看看
 
输出层个神经元输出中没有用到S函数。


所有时间均为北京时间。现在的时间是 19:38

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.