问题描述
- matlab实现BP神经网络,训练结果不好,附源代码
- 希望大家看看,谢谢了!自己看了一整天都不知道哪里出现了问题,编程思想按照经典的机器学习的书
lr=0.05; %lr为学习速率;
err_goal=0.1; %err_goal为期望误差最小值
max_epoch=15000; %max_epoch为训练的最大次数;
a=0.9; %a为惯性系数
Oi=0;
Ok=0; %置隐含层和输出层各神经元输出初值为0
%提供两组训练集和目标值(3输入神经元,2输出)
%X=[1 1;-1 -1;1 1];
%T=[1 1;1 1];
load house_dataset;
x=houseInputs;
t=houseTargets;
%数据的归一化
maxRowx=max(x[]2);
maxRowt=max(t[]2);
minRowx=min(x[]2);
minRowt=min(t[]2);
% y = ( x - min )/( max - min )
for i=1:size(x2)
x(:i)=(x(:i)-minRowx)./(maxRowx-minRowx);
t(:i)=(t(:i)-minRowt)./(maxRowt-minRowt);end
%初始化wki,wij(M为输入节点j的数量;q为隐含层节点i的数量;L为输出节点k的数量)
[MN]=size(x);
q=8;
[LN]=size(t); %N为训练集对数量
wij=rand(qM);
wki=rand(Lq);%随机值在-0.05到0.05之间
wij0=zeros(size(wij));
wki0=zeros(size(wki));for epoch=1:max_epoch
for n=1:N %for every exampleneti=wij*x(:n);%q*1 每个隐藏层的输出 oi=1./(1+exp(-neti)); netk=wki*oi;%L*1 每个输出层的输出 ok=1./(1+exp(-netk)); deltak=ok.*(1-ok).*(t(:n)-ok);%输出层的误差项 deltai=oi.*(1-oi).*(wki'*deltak);%隐藏层de误差项 %更新对应的权值 deltawij=lr*deltai*(x(:n)'); deltawki=lr*deltak*(ok'); wij=wij+deltawij; wki=wki+deltawki; %计算误差函数 E=0.0; for i=1:N %N为训练的总数 neti=wij*x(:i);%q*1 每个隐藏层的输出 oi=1./(1+exp(-neti)); netk=wki*oi;%L*1 每个输出层的输出 ok=1./(1+exp(-netk)); E=E+(ok-t)*(ok-t)'; end E=E/2; fprintf('the error is %f the iteration is %dn'Eepoch);endif E<err_goal break;end
end
时间: 2024-10-06 08:21:23