|
百度网盘链接:
链接:http://pan.baidu.com/s/1bV4asu
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1
BP神经网络底层代码详解:
- clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
- warning off % 消除警告
- feature jit off % 加速代码运行
- format short % 数据类型
- tic % 运算计时
- load('data.mat')
- xs = data(1:3,:)'; % 输入数据
- ys = data(4,:)'; % 输出数据
- % 选连样本输入输出数据归一化
- xsmin = min(xs);
- xsmax = max(xs);
- for i=1:length(xsmin)
- xs(:,i) = (xs(:,i)-xsmin(i))./(xsmax(i)-xsmin(i));
- end
- % 拟合计算
- hiddennum = 10; % 隐藏层个数
- itermax = 4000; % 迭代计算次数
- % 节点个数
- inputnum=3; % 自变量个数
- outputnum=1; % 因变量个数
- xite=0.1; % 学习因子
- alfa1=0.5; % 动量系数
- % 输入层到隐藏层 权值
- w1 = 10*rands(inputnum,hiddennum);
- w1_1=w1;
- w1_2=w1;
- % 隐藏层到输出层 权值
- w2 = 10*rands(hiddennum,outputnum);
- w2_1=w2;
- w2_2=w2;
- I=zeros(hiddennum,1); % 输入层到隐藏层 计算值
- Iout=zeros(hiddennum,1); % 隐藏层到输出层 计算值
- FI=zeros(hiddennum,1); % S函数的导数f(x) = 1/(1+exp(-x)),则导数f(x)' = f(x)*(1-f(x))
- NS=size(xs,1); % 训练数据维数,样本个数
- for ii=1:itermax
- for s=1:NS % 逐行提取样本
- % 输入层到隐藏层
- x=xs(s,:); % 逐行提取样本
- for j=1:hiddennum
- I(j)=x*w1(:,j);
- Iout(j)=1/(1+exp(-I(j)));
- end
- % 隐藏层到输出层
- yl=w2'*Iout;
-
- y=ys(s,:); % 实际值、
- ey=y-yl; % 误差
- el = 0.5*( ey )^2; % 输出误差性能指标
- es(s)=el;
-
- if s==NS
- E = sum(es); % 误差累计和
- end
-
- % 隐藏层到输出层的更新
- w2=w2_1+xite*Iout*ey+alfa1*(w2_1-w2_2);
-
- % 输入层到隐藏层的更新
- for j=1:hiddennum
- S=1/(1+exp(-I(j)));
- FI(j)=S*(1-S);
- end
- for i=1:inputnum
- for j=1:hiddennum
- dw1(i,j)=xite*FI(j)*x(i)*(ey(1)*w2(j,1));
- end
- end
- w1=w1_1+dw1+alfa1*(w1_1-w1_2);
-
- w1_2=w1_1; w1_1=w1;
- w2_2=w2_1; w2_1=w2;
- end
- Ek(ii)=E; % 每一次的迭代误差
- end
- time = toc % 计时结束
- %% 画图
- figure(1);
- % plot(Ek,'ro-');
- loglog(Ek,'ro-')
- xlabel('迭代次数');ylabel('迭代误差E');axis tight;grid on;
- %% 数据拟合画图
- test = xs;
- for i=1:size(test,1) % 样本个数
- for j=1:hiddennum
- I_test(i,j)=test(i,:)*w1(:,j);
- Iout_test(i,j)=1/(1+exp(-I_test(i,j)));
- end
- end
- y=w2'*Iout_test';
- disp(['预测值: '])
- disp( num2str(y') )
- disp(['预测结果的均方根误差: ', num2str( mse(y'-ys) ) ])
- figure(2),hold on;
- plot(y,'r.-');
- plot(ys,'b.-');
- legend('拟合预测数据','实际数据');
- grid on;axis tight;
- hold off;
复制代码
案例分享:【1】BP神经网络模糊评价
【2】BP 神经网络训练
|
|