Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 人工智能 > 深度神经网络/深度学习
深度神经网络/深度学习 A discussion board for Deep Neural Network|Deep Learning.
回复
 
主题工具 显示模式
旧 2009-10-23, 02:17 PM   #1
初级会员
 
注册日期: 2009-10-23
帖子: 2
感谢他人: 0
有 0 帖获得 0 感谢
声望力: 0
lzroc 正向着好的方向发展
默认 熟悉 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不是很久。
lzroc 当前离线   回复时引用此帖
旧 2009-10-23, 03:01 PM   #2
初级会员
 
注册日期: 2009-10-23
帖子: 1
感谢他人: 0
有 0 帖获得 0 感谢
声望力: 0
jessicas071 正向着好的方向发展
默认 回复: 熟悉 bp神经网络编程的进来看看

没看到你建立神经网络的语句,比如net=newff(minmax(P),[21,2],{'tansig','purelin'},'trainlm');
jessicas071 当前离线   回复时引用此帖
旧 2009-10-23, 07:05 PM   #3
初级会员
 
注册日期: 2009-10-23
帖子: 2
感谢他人: 0
有 0 帖获得 0 感谢
声望力: 0
lzroc 正向着好的方向发展
默认 回复: 熟悉 bp神经网络编程的进来看看

引用:
作者: jessicas071 查看帖子
没看到你建立神经网络的语句,比如net=newff(minmax(P),[21,2],{'tansig','purelin'},'trainlm');
你好 ,我不是用工具箱的,就是一个M文件程序。
lzroc 当前离线   回复时引用此帖
旧 2009-11-16, 10:50 PM   #4
初级会员
 
注册日期: 2009-03-11
年龄: 33
帖子: 11
感谢他人: 0
有 1 帖获得 1 感谢
声望力: 13
chenweibit 正向着好的方向发展
默认 回复: 熟悉 bp神经网络编程的进来看看

你单步调试过吗?单步调试显示你的wki和deltai交替无限增长,应该是某个公式用错了吧,(初步意见)
chenweibit 当前离线   回复时引用此帖
旧 2010-09-15, 06:04 PM   #5
gongyonghui2
游客
 
帖子: n/a
默认 回复: 熟悉 bp神经网络编程的进来看看

最大迭代次数作为终止条件你貌似最后没用到
  回复时引用此帖
旧 2013-04-02, 04:30 PM   #6
初级会员
 
注册日期: 2013-04-02
帖子: 1
感谢他人: 0
有 0 帖获得 0 感谢
声望力: 0
一只孤独的小蚂蚁 正向着好的方向发展
默认 回复: 熟悉 bp神经网络编程的进来看看

输出层个神经元输出中没有用到S函数。
一只孤独的小蚂蚁 当前离线   回复时引用此帖
回复

标签
bp, 神经网络, matlb

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用



所有时间均为北京时间。现在的时间是 10:53 PM


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

SEO by vBSEO ©2009, Crawlability, Inc.