Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 人工智能 > 深度神经网络/深度学习
深度神经网络/深度学习 A discussion board for Deep Neural Network|Deep Learning.
回复
 
主题工具 显示模式
旧 2011-06-24, 10:03   #1
wuwe1030
初级会员
 
注册日期: 2011-06-24
年龄: 36
帖子: 1
声望力: 0
wuwe1030 正向着好的方向发展
难过 求助BP神经网络的问题

大家好,我是新手,最近刚接触ANN方面的东西,我用matlab做了一个简单的函数逼近的例子(没有用工具箱),逼近的函数是sin(x),但是在训练了10000次后,我发现我的网络还是不收敛的,不知道遇到的了什么问题,所以想请大家帮忙看下,谢谢。
代码:
clear;
clc;

format long;

samplelist=0.02:0.02:3;%样本输入值
expectlist=sin(samplelist);%

[m,n]=size(samplelist);
inputNums=m;%输入节点数
samplelist = reshape(samplelist,n,m);

sampleNums = n;%样本数

[m,n]=size(expectlist);
outputNums=m;%输出节点数
expectlist = reshape(expectlist,n,m);

hideNums=3;%隐层节点数
maxcount=10000;%最大训练次数
%samplenum=7;%总样本组数
precision=0.001;%精度

yita=0.5;%梯度下降的步长
alpha=0.5;%动量系数设定值
%count=1;
%error=zeros(1,count);
%errorp=zeros(1,samplenum);
error=0.0;

%v=rand(inputNums,hideNums);
W1=rand(inputNums,hideNums);%输入层到隐层的权值矩阵
deltaW1=zeros(inputNums,hideNums);%W1修正值
W2=rand(hideNums,inputNums);%隐层到输出层的权值矩阵
deltaW2=zeros(hideNums,inputNums);%W2修正值
net1=zeros(inputNums,1);%输入层的样本值
O1=zeros(inputNums,1);%输入层的输出值
net2=zeros(hideNums,1);%隐层的输入值
O2=zeros(hideNums,1);%隐层的输出值
net3=zeros(outputNums,1);%输出层的输入值
O2=zeros(outputNums,1);%输出层的输出值

st1=zeros(hideNums,1);
st2=zeros(outputNums,1);

k=0;
%%用sigmoid函数
%1/(1-exp(-x))

for i = 1:10000
    %计算实际输出
    index=round(random('unif',1,sampleNums,1));%产生一个随机数
    d=expectlist(index,:)';
    net1=samplelist(index,:)';%输入样本为样本集中的第index个
    O1=1./(1-exp(-net1));%输入层输出
    net2=W1'*O1;         %隐层输入
    O2=1./(1-exp(-net2));%隐层输出
    net3=W2'*O2;         %输出层输入
    O3=1./(1-exp(-net3));%输出层输出
    error = norm(O3-d);
%    if error <= precision
%       break;
%    end
       
    %修正权值
    sigma2=(d-O3).*O3.*(1-O3);%输出层
    sigma1=O2.*(1-O2).*(W2*sigma2);%隐层
    
    %st1 = st1+yita*sigma1;
    %st2 = st2+yita*sigma2;
    
    deltaW1 = -yita*O1*sigma1' + alpha*deltaW1;
    deltaW2 = -yita*O2*sigma2' + alpha*deltaW2;
    
    W1= W1 + deltaW1;
    W2= W2 + deltaW2;
    
    k=k+1;
end

testarray=0.01:0.04:2.01;
TO1=1./(1-exp(-testarray));
TI2=W1'*TO1;
TO2=1./(1-exp(-TI2));
TI3=W2'*TO2;
testres=1./(1-exp(-TI3));
plot(testarray,testres,'+');
wuwe1030 当前离线   回复时引用此帖
旧 2012-05-25, 02:23   #2
大学生
初级会员
 
注册日期: 2008-11-25
年龄: 39
帖子: 16
声望力: 17
大学生 正向着好的方向发展
默认 回复: 求助BP神经网络的问题

大概扫了一眼程序,瞎提些意见,望谅:
1.程序中的“废话”太多,直接定义一个1-3-1的网络结构就可以了;
2.输入层-隐层及隐层-输出层中未考虑偏置的问题,基础理论应加强;
3.尽量不要定义最大训练次数,用while条件语句;
4.precision定义了,但似乎后面没用过;
5.最好采用一些通用的英文表述法,如precision换为ErrorTolerance,yita换为eta,expect换为desired等等。
大学生 当前离线   回复时引用此帖
回复

主题工具
显示模式

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

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



所有时间均为北京时间。现在的时间是 05:00


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