| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1145 人关注过本帖
标题:BP神经网络收敛的问题
只看楼主 加入收藏
happyxinghao
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-9-3
收藏
 问题点数:0 回复次数:0 
BP神经网络收敛的问题
各位高手好!我现在想通过BP网络实现一个双输入单输出(一共32组数据)的函数逼近,但是总体误差过大,不能满足要求。请各位高手帮忙看看。
还有不知道为什么当只有几组数据时BP神经网络工具箱函数好用,但当32组数据时就总是显示这些函数是obsolete function?

lr=0.05;err=0.001;%lr是学习速率,err为误差期望最小值
max_epoch=10000;a=0.9;%max_epoch为训练最大步数,a为惯性系数
Oi=0;Ok=0;%置隐含层和输出层初始值为0;
%提供32组训练集和目标值(两输入一输出)
%激活函数取g(x)=1/(1+exp(-x))
X=[0.8,1.2,1.6,2.4,3.2,3.6,4.2,4.8,0.8,1.2,1.6,2.4,3.2,3.6,4.2,4.8, 0.8,1.2,1.6,2.4,3.2,3.6,4.2,4.8,0.8,1.2,1.6,2.4,3.2,3.6,4.2,4.8;
0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1, 2.2,2.2,2.2,2.2,2.2,2.2,2.2,2.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2];
T1=[16,16,16,12,12,8,4,0,16,12,8,7,6,4,0,0,16,16,16,12,8,8,4,0,16,16,16,12,12,8,4,0];
%我想激活函数不能大于1,最后目标值不能大于1。(我可能理解有问题,请您纠正)
T=T1/20+0.1;
[M,N]=size(X);q=15;[L,N]=size(T);%M为输入节点j的数量;q为隐含层节点i的数量;L为输出层节点k的数量
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)+0.5)/1.4));
end
end
%计算输出层各神经元输出
NETk=wki*Oi;
for i=1:N
for k=1:L
Ok(k,i)=1/(1+exp((-NETk(k,i)+0.5)/1.4));
end
end
%计算误差函数
E=((T-Ok)*(T-Ok)')/2;
if(E<err)break;end
% 调整输出层加权系数
deltak=Ok.*(1-Ok).*(T-Ok);
w=wki;
wki=wki+lr*deltak*Oi';
wki0=w;
% 调整隐含层加权系数
deltai=Oi.*(1-Oi).*(deltak'*wki)';
w=wij;
wij=wij+lr*deltai*X';
wij0=w;
end
E%显示最后误差
epoch%显示计算次数
X1=X;
%计算各神经元输出
NETi=wij*X1;
for j=1:N
for i=1:q
Oi(i,j)=1/(1+exp((-NETi(i,j)+0.5)/1.4));
end
end
NETk=wki*Oi;
for i=1:N
for k=1:L
Ok(k,i)=1/(1+exp((-NETk(k,i)+0.5)/1.4));
end
end
A=(Ok-0.1)*20 %显示输出结果
B=T1-A
plot(A);
hold on;
plot(T1,'r');
搜索更多相关主题的帖子: 神经网络 epoch 函数 max err 
2007-09-03 17:04
快速回复:BP神经网络收敛的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038082 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved