Skip to content

anjiang2016/bp-matlab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

% bp-matlab %梯度下降法训练bp网络,matlab

%最初的bp所有激活函数均为sigmoid函数 function train_bp %定义层向量,即每层的神经元数据 layers=[2 3 2]; % 输入层2个,隐含层3个,输出层2个

% 初始化权重 W=[]; for i=1:length(layers)-1 W{i}=rand(layers(i),layers(i+1)); end

%整理样本数据,这里直接用随机数生成一些数据 x=[rand(2,5)+2 rand(2,5)-2]; d=[zeros(2,5) ones(2,5)];

%训练

for i=1:199 % 训练100次,然后每次迭代后的误差打印出来 % 正向计算 % net_h=x(:,mod(i,10)+1)'W{1}; % y=sigmoid(net_h); % net_o=yW{2}; % o=sigmoid(net_o); [o,y]=forward(x(:,mod(i,10)+1)',W);

 % 算误差
 error=d(:,mod(i,10)+1)'-o;
 [i,error]
 % 算各层的传播误差 % 算权重修正值
 ita=0.5;% 学历率
 % 梯度下降法计算delta_W
 delta_o=(d(:,mod(i,10)+1)'-o).*o.*(1-o);
 delta_W{2}=ita*y'*delta_o;

 delta_h=W{2}*delta_o';
 delta_W{1}=ita*x(:,mod(i,10)+1)*delta_h';
 
 
 % 更新权值,完成一次学习
 W{1}=W{1}+delta_W{1};
 W{2}=W{2}+delta_W{2};

end

% 测试 x=[rand(2,5)+2 rand(2,5)-2]; [o,y]=forward(x',W)

end

function [o,y]=forward(x,W) for i=1:size(x,1) net_h(i,:)=x(i,:)*W{1}; y(i,:)=sigmoid(net_h(i,:)); net_o(i,:)=y(i,:)*W{2}; o(i,:)=sigmoid(net_o(i,:)); end end function y=sigmoid(x) y=1./(1+exp(-x)); end

About

自己实现bp网络的梯度下降法计算

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages