您的位置:首页 > 其它

利用隐藏神经元解决异或问题的小型示例程序

2012-09-17 19:14 176 查看
  实例出自Simon Hayking的《神经网络原理》多层感知器一节。

  问题简单叙述如下:从0和1的重集中选择2个元素进行异或,其输入是非线性可分模式。即,不能用一条直线将(0,0)、(0,1)、(1,0)、(1,1)根据它们异或的结果用一条直线进行划分。因此,一个简单感知器不能解决XOR问题。这里使用隐藏神经元进行解决划分问题。程序比较简单,也没什么泛用性。

  激活函数phi(这里使用阈值函数)、神经元neuron、权值、偏置等术语请参照原书。模拟程序如下:

#include <stdio.h>
#include <stdlib.h>

struct neuron {
int w1;
int w2;
float b;
};

int phi(struct neuron *n, int i,int j) {
float ret;
ret = (float)(n->w1)*i + (float)(n->w2)*j + (float)(n->b);
if (ret<0)
return 0;
else
return 1;
}

int main() {
int ret,k;
int i[4] = {0,1,0,1};
int j[4] = {0,0,1,1};
struct neuron n1 = {1,1,-1.5};
struct neuron n2 = {1,1,-0.5};
struct neuron n3 = {-2,1,-0.5};
for (k=0;k<4;k++) {
ret = phi(&n3,phi(&n1,i[k],j[k]),phi(&n2,i[k],j[k]));//神经元的构成方式
printf("(%d,%d),output is %d\n",i[k],j[k],ret);
}
return 1;
}


输出结果:

(0,0),output is 0
(1,0),output is 1
(0,1),output is 1
(1,1),output is 0


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: