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!