简单多层神经网络实现异或XOR

时间:2022-12-14 17:44:54

最近在看《Neural Network Design_Hagan》


然后想自己实现一个XOR 的网络。

由于单层神经网络不能将异或的判定分为两类。


根据 a^b=(a&~b)|(~a&b)

而 我试了一下 或 和 与 都可以用感知神经元解决,也就是一个。


那么与和或的实现:

简单多层神经网络实现异或XOR

hardlim (n )=a ,n>=0时 a=1;n<0时a=0;

显然需要三个神经元

简单多层神经网络实现异或XOR

神经元表达式如下:

简单多层神经网络实现异或XOR



int fun(int w[],int x[],int b)
{

return w[0]*x[0]+w[1]*x[1]+b;
}

int main()
{
int w1[2]={1,1},w2[2]={1,1},w3[2]={1,1};
int x[2];
while(scanf("%d%d",&x[0],&x[1])!=EOF)
{

int x2[2];
x[0]=!x[0];
x2[0] =hardlim( fun(w1,x,-2) );
x[0]=!x[0];
x[1]=!x[1];
x2[1] = hardlim ( fun(w2,x,-2) );
x[1]=!x[1];
printf("%d XOR %d = %d\n",x[0],x[1] ,hardlim( fun( w3,x2,-1) ));

}

return 0;

}


注意x1,x2输入的时候 需要取反。

简单多层神经网络实现异或XOR

验证正确。