利用隐藏神经元解决异或问题的小型示例程序
2012-09-17 19:14
176 查看
实例出自Simon Hayking的《神经网络原理》多层感知器一节。
问题简单叙述如下:从0和1的重集中选择2个元素进行异或,其输入是非线性可分模式。即,不能用一条直线将(0,0)、(0,1)、(1,0)、(1,1)根据它们异或的结果用一条直线进行划分。因此,一个简单感知器不能解决XOR问题。这里使用隐藏神经元进行解决划分问题。程序比较简单,也没什么泛用性。
激活函数phi(这里使用阈值函数)、神经元neuron、权值、偏置等术语请参照原书。模拟程序如下:
输出结果:
问题简单叙述如下:从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
相关文章推荐
- 利用隐藏神经元解决异或问题的小型示例程序
- Delphi小型示例程序所涉及到的N多问题及解决办法
- 将bat转为exe后利用程序监视解决node崩溃问题
- C#中利用GDI作图解决异或问题
- 解决“添加删除程序”里面隐藏问题
- python+Opencv视频读取问题+官网光流法示例程序报错问题解决
- .net利用程序集的GUID解决程序只能运行一次的问题
- 解决“启动程序后,隐藏至右下角,闪一下的问题”
- VS2010/MFC 利用OLE读写excel操作时,手动打开其他excel文档程序崩掉的问题解决
- Web程序中利用web.config解决无法输出excel页面的问题
- Web程序中利用web.config解决无法输出excel页面的问题
- (原创)解决NIOS 11.0使用友晶示例程序无法编译的问题
- Flex中利用IFrame嵌入HTML网页后,出现菜单被遮挡的问题解决办法,包括IFrame别隐藏的问题
- 在Resin3下配置SpringSide的HelloWorld示例程序碰到的问题和解决方法(说白了还是resin3.0解析xml问题)
- 利用程序解决三扇门问题(java)
- 解决ASP.NET回传后div滚动条位置复位的问题(利用隐藏控件原理)
- 利用C语言小程序来解决大问题
- 利用异或的特性解决,找出重复数的问题
- 解决ASP.NET回传后div滚动条位置复位的问题(利用隐藏控件原理)
- Web程序中利用web.config解决无法输出excel页面的问题