使用回馈式神经网络实现一个XOR的非线性分类
2014-09-17 10:31
507 查看
不多说了,说多了都是泪,用矩阵写法死活出错。无奈只好for循环来写了。delay为1步,实现对上一个xor的预测分析。测试效果基本达到100%。看代码吧:
f = @(x)1./(1+exp(-x));
df=@(x)f(x).*(1-f(x));
delta=@(x, y)x==y;
% net config
alpha = 4;
w = rand(3, 6)*2 - 1;
p1 = zeros(3, 6);
p2 = p1;
p3 = p2;
% feedforward
x = randi([0, 1], 2, 1);
t = xor(x(1), x(2));
y = zeros(3, 1);
z = [1; x; y];
s = w*z;
y = f(s);
for i = 1:1000
x = randi([0, 1], 2, 1);
z = [1; x; y];
s = w*z;
y = f(s);
for j = 1:3
for k = 1:6
q1=df(s(1))*(w(1,4)*p1(j,k) + w(1,5)*p2(j,k) + w(1,6)*p3(j,k) + delta(1,j)*z(k));
q2=df(s(2))*(w(2,4)*p1(j,k) + w(2,5)*p2(j,k) + w(2,6)*p3(j,k) + delta(2,j)*z(k));
q3=df(s(3))*(w(3,4)*p1(j,k) + w(3,5)*p2(j,k) + w(3,6)*p3(j,k) + delta(3,j)*z(k));
p1(j,k)=q1;
p2(j,k)=q2;
p3(j,k)=q3;
end
end
e = t - y(3);
w = w + alpha*e*p3;
t = xor(x(1), x(2));
end
%test
x = randi([0, 1], 2, 1);
y = zeros(3, 1);
z = [1; x; y];
s = w*z;
y = f(s);
t = xor(x(1), x(2));
count = 0;
for i = 1:1000
x = randi([0, 1], 2, 1);
z = [1; x; y];
y = f(w*z);
if y(3) >= 0.5
if t == 1
count = count+1;
end
else
if t == 0
count = count+1;
end
end
t = xor(x(1), x(2));
end
count
f = @(x)1./(1+exp(-x));
df=@(x)f(x).*(1-f(x));
delta=@(x, y)x==y;
% net config
alpha = 4;
w = rand(3, 6)*2 - 1;
p1 = zeros(3, 6);
p2 = p1;
p3 = p2;
% feedforward
x = randi([0, 1], 2, 1);
t = xor(x(1), x(2));
y = zeros(3, 1);
z = [1; x; y];
s = w*z;
y = f(s);
for i = 1:1000
x = randi([0, 1], 2, 1);
z = [1; x; y];
s = w*z;
y = f(s);
for j = 1:3
for k = 1:6
q1=df(s(1))*(w(1,4)*p1(j,k) + w(1,5)*p2(j,k) + w(1,6)*p3(j,k) + delta(1,j)*z(k));
q2=df(s(2))*(w(2,4)*p1(j,k) + w(2,5)*p2(j,k) + w(2,6)*p3(j,k) + delta(2,j)*z(k));
q3=df(s(3))*(w(3,4)*p1(j,k) + w(3,5)*p2(j,k) + w(3,6)*p3(j,k) + delta(3,j)*z(k));
p1(j,k)=q1;
p2(j,k)=q2;
p3(j,k)=q3;
end
end
e = t - y(3);
w = w + alpha*e*p3;
t = xor(x(1), x(2));
end
%test
x = randi([0, 1], 2, 1);
y = zeros(3, 1);
z = [1; x; y];
s = w*z;
y = f(s);
t = xor(x(1), x(2));
count = 0;
for i = 1:1000
x = randi([0, 1], 2, 1);
z = [1; x; y];
y = f(w*z);
if y(3) >= 0.5
if t == 1
count = count+1;
end
else
if t == 0
count = count+1;
end
end
t = xor(x(1), x(2));
end
count
相关文章推荐
- TensorFlow练手项目一:使用循环神经网络(RNN)实现影评情感分类
- 使用带有隐层的神经网络实现颜色二分类
- 神经网络与深度学习 1.6 使用Python实现基于梯度下降算法的神经网络和MNIST数据集的手写数字分类程序
- 神经网络与深度学习 使用Python实现基于梯度下降算法的神经网络和自制仿MNIST数据集的手写数字分类可视化程序 web版本
- matlab使用神经网络实现分类功能
- 【使用JSOUP实现网络爬虫】入门:解析和遍历一个HTML文档
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 【使用JSOUP实现网络爬虫】使用DOM方法来遍历一个文档
- 【网络转载】Asp.net使用XPath实现一个简单的RSS阅读器
- 使用netsh实现的一个无线网络嗅探器
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 【使用JSOUP实现网络爬虫】解析一个body片断
- 【使用JSOUP实现网络爬虫】修改数据-设置一个元素的HTML内容
- 使用HTML5和jQuery插件Quicksand实现一个超酷的星际争霸2兵种分类展示效果
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 【使用JSOUP实现网络爬虫】从一个URL加载一个Document