请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册
查看: 6691|回复: 0

BP神经网络底层代码详解

[复制链接]

1278

主题

1504

帖子

90

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22549
发表于 2017-5-22 22:02:24 | 显示全部楼层 |阅读模式
百度网盘链接:
链接:http://pan.baidu.com/s/1bV4asu
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

BP神经网络底层代码详解:
  1. clc,clear,close all   % 清理命令区、清理工作区、关闭显示图形
  2. warning off           % 消除警告
  3. feature jit off       % 加速代码运行
  4. format short        % 数据类型
  5. tic                 % 运算计时
  6. load('data.mat')
  7. xs = data(1:3,:)';  % 输入数据
  8. ys = data(4,:)';    % 输出数据
  9. % 选连样本输入输出数据归一化
  10. xsmin = min(xs);   
  11. xsmax = max(xs);
  12. for i=1:length(xsmin)
  13.     xs(:,i) = (xs(:,i)-xsmin(i))./(xsmax(i)-xsmin(i));
  14. end
  15. % 拟合计算
  16. hiddennum = 10;   % 隐藏层个数
  17. itermax = 4000;   % 迭代计算次数
  18. % 节点个数
  19. inputnum=3;   % 自变量个数
  20. outputnum=1;  % 因变量个数

  21. xite=0.1;   % 学习因子
  22. alfa1=0.5;   % 动量系数

  23. % 输入层到隐藏层 权值
  24. w1 = 10*rands(inputnum,hiddennum);   
  25. w1_1=w1;   
  26. w1_2=w1;   
  27. % 隐藏层到输出层 权值
  28. w2 = 10*rands(hiddennum,outputnum);  
  29. w2_1=w2;   
  30. w2_2=w2;  

  31. I=zeros(hiddennum,1);    % 输入层到隐藏层 计算值
  32. Iout=zeros(hiddennum,1); % 隐藏层到输出层 计算值
  33. FI=zeros(hiddennum,1);   % S函数的导数f(x) = 1/(1+exp(-x)),则导数f(x)' = f(x)*(1-f(x))

  34. NS=size(xs,1);  % 训练数据维数,样本个数

  35. for ii=1:itermax
  36.     for s=1:NS     % 逐行提取样本
  37.         % 输入层到隐藏层
  38.         x=xs(s,:);   % 逐行提取样本
  39.         for j=1:hiddennum   
  40.             I(j)=x*w1(:,j);
  41.             Iout(j)=1/(1+exp(-I(j)));
  42.         end
  43.         % 隐藏层到输出层
  44.         yl=w2'*Iout;
  45.         
  46.         y=ys(s,:);  % 实际值、
  47.         ey=y-yl;              % 误差
  48.         el = 0.5*( ey )^2;    % 输出误差性能指标
  49.         es(s)=el;
  50.         
  51.         if s==NS
  52.            E = sum(es);    % 误差累计和
  53.         end
  54.         
  55.         % 隐藏层到输出层的更新
  56.         w2=w2_1+xite*Iout*ey+alfa1*(w2_1-w2_2);
  57.         
  58.         % 输入层到隐藏层的更新
  59.         for j=1:hiddennum
  60.            S=1/(1+exp(-I(j)));
  61.            FI(j)=S*(1-S);
  62.         end
  63.         for i=1:inputnum
  64.            for j=1:hiddennum
  65.                dw1(i,j)=xite*FI(j)*x(i)*(ey(1)*w2(j,1));
  66.            end
  67.         end
  68.         w1=w1_1+dw1+alfa1*(w1_1-w1_2);
  69.         
  70.         w1_2=w1_1; w1_1=w1;
  71.         w2_2=w2_1; w2_1=w2;
  72.     end
  73.     Ek(ii)=E;   % 每一次的迭代误差
  74. end
  75. time = toc   % 计时结束
  76. %% 画图
  77. figure(1);
  78. % plot(Ek,'ro-');
  79. loglog(Ek,'ro-')
  80. xlabel('迭代次数');ylabel('迭代误差E');axis tight;grid on;
  81. %% 数据拟合画图
  82. test = xs;
  83. for i=1:size(test,1)  % 样本个数
  84.         for j=1:hiddennum   
  85.         I_test(i,j)=test(i,:)*w1(:,j);
  86.         Iout_test(i,j)=1/(1+exp(-I_test(i,j)));
  87.         end
  88. end
  89. y=w2'*Iout_test';
  90. disp(['预测值: '])
  91. disp( num2str(y') )

  92. disp(['预测结果的均方根误差: ', num2str(  mse(y'-ys) ) ])

  93. figure(2),hold on;
  94. plot(y,'r.-');
  95. plot(ys,'b.-');
  96. legend('拟合预测数据','实际数据');
  97. grid on;axis tight;
  98. hold off;
复制代码

案例分享:【1】BP神经网络模糊评价
【2】BP 神经网络训练

算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-3-29 00:03 , Processed in 0.228210 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表