前反馈神经网络的手工推导和第一Matlab尝试

My first Nerual Net Programmer 

还是有点兴奋

刚来川大,进到智能实验室还是有点不习惯,努力进入状态ing.


这是一个  3层feedforward的前馈神经网络模型,我只能说一个字,fuck


clc
clear 
close all
%feedforward  nerual-network

%% net config
f  = @(x)1 ./ (1+exp(-x));
W1 = -1 + 2 *rand(3,3);  
W2 = -1 + 2 *rand(1,3);
maxIterNum = 300000;          %虽然不明白为什么要训练这么多次,我以后要好好的学习 课本知识

%% train 
x = randi([0,1],[2,1]);
alpha = 4;
beta = 4;

y1 = zeros(3,1);
for k =1:maxIterNum  
    d = xor(x(1),x(2));
    x = randi([0,1],[2,1]);
    z = [x;1];
    s1 = W1*z;  %计算出值
    y1 = f(s1);
    s2 = W2*y1;
    y = f(s2);
    
    %err = sum(y) - d;  
    % Error = sum(1/2*(w.*x - d).^2);   %总的误差
    %Weight = Weight - alpha*( func( err ));       % update w  
    W2 = W2 - beta*((y-d)*y*(1-f(s2))*y1');                          %必须先算出来W2,再计算W1 %%% 还有需要转置的地方!
    W1 = W1 - alpha*((y-d)*y*(1-f(s2))*W2*f(s1)*(1-f(s1))*z');       %涛哥说可以一个神经元一个神经元的计算,这样比较清楚,我自己推到出来  
    % 可以通过调试 测试公式中  向量的维度是否正确
end


%%  test
x = randi([0,1],[2,1]);
d = xor(x(1),x(2));
pass = 0;
for k = 1:100
    z = [x;1];
    s1 = W1*z;
    y1 = f(s1); 
    s2 = W2*y1;
    y = f(s2);
    if (abs(y>=0.5) - d) == 0         %这里需要注意,
        pass = pass + 1;
    end
end
        
W1
W2
pass
 
%% Note:
%This is my frist neural network program! I spend 3 days!  For memory!
% 虽然我对整个公式推到过程还是有点 恍惚,但是我会一直努力前行
%                                    2014/9/18      SCU 
%


上图就是我画的神经网络模型, 同时   右边是  推导W1的过程,一个激动人心的过程

在  马克思 课上,我的推导,这次推导是我成功的基础!!ok

end!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值