利用隐藏神经元解决异或问题的小型示例程序
2013-05-22 21:01
253 查看
实例出自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多问题及解决办法
- Web程序中利用web.config解决无法输出excel页面的问题
- 利用程序解决三扇门问题(java)
- 利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为jar后图片找不着的问题
- 利用异或的特性解决,找出重复数的问题,应该是目前最优算法。
- 如何解决win7程序靠边自动隐藏的问题(图文)
- 利用异或的特性解决,找出重复数的问题
- 解决home键把程序隐藏到后台后,再次点击应用会重新打开MainActivity问题
- linux环境下,解决eclipse找不到Pylon示例程序链接库的问题
- 解决利用安卓真机调试程序时日志不显示的问题
- 利用swt中的一个获取图片的类SwingResourceManager 来解决将程序打为jar后图片找不着的问题
- 在Linux中如何利用backtrace信息解决程序崩溃的问题
- C#中利用GDI作图解决异或问题
- 解决“添加删除程序”里面隐藏问题
- Android下Toolbar+SearchView程序崩溃闪退问题解决方法及示例
- 将bat转为exe后利用程序监视解决node崩溃问题
- .net利用程序集的GUID解决程序只能运行一次的问题
- 解决“启动程序后,隐藏至右下角,闪一下的问题”
- Web程序中利用web.config解决无法输出excel页面的问题