利用隐藏神经元解决异或问题的小型示例程序
实例出自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 |
作者:五岳
出处:http://www.cnblogs.com/wuyuegb2312
对于标题未标注为“转载”的文章均为原创,其版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人