BP网络异或问题C语言实现,bp网络实现xor异或的C语言实现202102
```
// bp21xor210202.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include
/********************************************
**
** 神经网络实现异或操作
**terry 41313989@qq.com
**2013.01.18
**
****************************************************/
#include
#include
#include
#include
#define Ni 2 // 输入层神经元的个数
#define Nm 2 // 隐含层神经元的个数
#define No 1 // 输出层神经元的个数
#define Enom 0.02 // 误差下限,达到这个误差以内即可认为训练成功
#define MAXSAMPLE 1000 // 样本的最大个数
#define BP_LEARNING(float)(0.5)// 学习系数
// 输入层神经元只有传递的功能
float HWeight[Ni + 1][Nm]; // 隐含层神经元的输入权值
float OWeight[Nm + 1][No]; // 输出层神经元的输出权值
float inputValue[Ni];
float destValue[No];
float E; // 每轮的误差
// 训练的过程
int train(float in[Ni], float d[No]);
// 神经网络初始化
void init();
// 测试的过程
int processTest(float in[Ni]);
//Sigmoid函数
float Sigmoid(float num);
int main()
{
float input[MAXSAMPLE][Ni]; // 输入
float dest[MAXSAMPLE][No]; // 目标输出
float test[Ni]; // 测试输入
int num;
int i, j;
long count = 0;
// 输入相关的测试
printf("Please input the number of sample:");
//scanf("%d", &num);
num = 4;
for (i = 0; i < num; i++)
{
for (j = 0; j < Ni; j++)
//scanf("%f", &input[i][j]);
input[0][0] = 0;input[0][1] = 0;
input[1][0] = 0;input[1][1] = 1;
input[2][0] = 1;input[2][1] = 0;
input[3][0] = 1;input[3][1] = 1;
for (j = 0; j < No; j++)
//scanf("%f", &dest[i][j]);
dest[0][0] = 0;
dest[1][0] = 1;
dest[2][0] = 1;
dest[3][0] = 0;
}
init();
while (1)
{
E = 0;
for (i = 0; i < num; i++)
{
train(input[i], dest[i]);
}
if (E < Enom)
break;
if (count % 20000 == 0)
printf("第%d迭代的误差为 %f \n", count, E);
count++;
}
// 训练好的神经网络测试
while (1)
{
printf("Please input the test data:");
for (i = 0; i < Ni; i++)
scanf("%f", &test[i]);
processTest(test);
}
return 1;
}
// 测试的过程
int processTest(float in[Ni])
{
int i, j;
float net[Nm], iin[Nm], out[No];
// 计算隐含层的神经元值
for (i = 0; i < Nm; i++)
{
net[i] = 1 * HWeight[0][i];
for (j = 1; j < Ni + 1; j++)
net[i] += HWeight[j][i] * in[j - 1];
}
// 使用S函数
for (i = 0; i < Nm; i++)
iin[i] = Sigmoid(net[i]);
// 计算输出层的值
for (i = 0; i < No; i++)
{
net[i] = 1 * OWeight[0][i];
for (j = 1; j < Nm + 1; j++)
net[i] += OWeight[j][i] * iin[j - 1];
}
for (i = 0; i < No; i++)
{
out[i] = Sigmoid(net[i]);
printf("%f ", out[i]);
}
printf("\n");
return 1;
}
// 训练的过程
int train(float in[Ni], float d[No])
{
int i, j;
float net[Nm], iin[Nm], out[No];
float deltaO[No + 1], deltaM[Nm + 1]; // delta值
float temp;
// 计算隐含层的神经元值
for (i = 0; i < Nm; i++)
{
net[i] = 1 * HWeight[0][i];
for (j = 1; j < Ni + 1; j++)
net[i] += HWeight[j][i] * in[j - 1];
}
// 使用S函数
for (i = 0; i < Nm; i++)
iin[i] = Sigmoid(net[i]);
// 计算输出层的值
for (i = 0; i < No; i++)
{
net[i] = 1 * OWeight[0][i];
for (j = 1; j < Nm + 1; j++)
net[i] += OWeight[j][i] * iin[j - 1];
}
for (i = 0; i < No; i++)
out[i] = Sigmoid(net[i]);
for (i = 0; i < No; i++)
E += (float)fabs(out[i] - d[i]);
// 计算误差,反向传播
for (i = 0; i < No; i++)
{
deltaO[i] = out[i] * (1 - out[i])*(d[i] - out[i]);
}
for (i = 0; i < Nm; i++)
{
temp = 0;
for (j = 0; j < No; j++)
{
temp += deltaO[j] * OWeight[i + 1][j];
}
deltaM[i] = iin[i] * (1 - iin[i])*temp;
}
// 调整权值
// 输出层
for (i = 0; i < No; i++)
{
OWeight[0][i] += BP_LEARNING * 1 * deltaO[i];
for (j = 1; j < Nm + 1; j++)
OWeight[j][i] += BP_LEARNING * iin[j - 1] * deltaO[i];
}
for (i = 0; i < Nm; i++)
{
HWeight[0][i] += BP_LEARNING * 1 * deltaM[i];
for (j = 1; j < Nm + 1; j++)
HWeight[j][i] += BP_LEARNING * in[j - 1] * deltaM[i];
}
return 1;
}
// 神经网络初始化
void init()
{
int i, j;
int random;
double x;
int stime;
long ltime;
ltime = time(NULL);
stime = (unsigned)ltime / 2;
srand(stime);
for (i = 0; i < Ni + 1; i++)
for (j = 0; j < Nm; j++)
{
// 设定网络连接的初值取值范围为(-0.5,0.5)
random = rand() % 100 - 50;
x = random;
x = x / 100;
HWeight[i][j] = (float)x;
}
for (i = 0; i < Nm + 1; i++)
for (j = 0; j < No; j++)
{
random = rand() % 100 - 50;
x = random;
x = x / 100;
OWeight[i][j] = (float)x;
}
}
//Sigmoid函数
float Sigmoid(float num)
{
return (float)(1 / (1 + exp(-num)));
}
//int main()
//{
// std::cout << "Hello World!\n";
//}
```
BP网络异或问题C语言实现,bp网络实现xor异或的C语言实现202102相关推荐
- 基于c语言实现bp算法,基于BP网络的自学习算法和C语言实现
BP 维普资讯 http://doc.docsou.com <业控制计算机} 0 2年 1工 2O 5卷第 4期 1 3 基于 B P网络的自学习算法和 C语言实现 尚丽中国科学技术大学经济技术 ...
- bp神经网络是用来干嘛的,bp神经网络是什么网络
1.什么是BP神经网络? BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成:正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差 ...
- rbf网络c语言程序设计,rbf网络(径向基函数插值)
任何神经网络的隐藏节点都不是越多越好.首先来讲吗,增加神经网络的隐藏节点会增大运算量,神经网络训练和测试需要的的时间就越长,降低了什么网络的学习速率,. rbf神经来网络即径向基函数神经网络(Radi ...
- 电大本科c及语言设计形考答案,2020国家开放大学电大《C语言程序设计》网络课形考任务4作业及答案(15页)-原创力文档...
国家开放大学电大<C语言程序设计>网络课形考任务4作业及答案 档任务4 一.选择题(共30分,每小题2分) 题目1 TOC \o "1-5" \h \z 假定有&quo ...
- GitHub的实现是否是基于此语言的支持网络编程性呢?
我觉好像是的,我之前很奇怪为什么那样就可以引用了,后来发现GitHub中的java JavaScript phton等语言都支持网络编程. 转载于:https://www.cnblogs.com/ ...
- Go语言基础之网络编程
文章目录 Go语言基础之网络编程 互联网协议介绍 互联网分层模型 物理层 数据链路层 网络层 传输层 应用层 socket编程 socket图解 Go语言实现TCP通信 TCP协议 TCP服务端 TC ...
- 单片机c语言或运算,单片机avr c语言位运算 与或非 异或逻辑 运算介绍 详解
位运算是指按二进制位进行的运算.在单片机中位运算通常用于I/O端口的输入输出控制和逻辑判断. C语言提供的位运算符有: 运算符 含义 功能 & 按位与 如果两个相应的二进制位都为1,则该位的结 ...
- iOS—网络实用技术OC篇网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- GO语言实现P2P网络-客户端实现并且运行和测试
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情 GO语言实现P2P网络 客户端实现 1.支持服务器参数化 go fun main(){ //设定参数 if ...
- bp神经网络分类器c语言,基于BP神经网络的隐写分析分类器设计
[ 摘 要 ] 设计并实现了基于BP神经网络的隐写分析分类器.首先对图像库中的图像进行格式变换,并使用扩展修改方向和钻石编码两种隐写方法进行不同嵌入率的隐写嵌入,然后计算载体图像和载密图像中平面域.D ...
最新文章
- Java常见的面试题(一)
- jquery中的ajax如何接收json串形式的接口
- TintTo和TintBy
- 关于 SAP 电商云 Spartacus UI 访问 b2b site 的权限问题
- Samba平台搭建和用户自行修改密码环境搭建笔记
- 【渝粤教育】广东开放大学 性考 形成性考核 (33)
- leetcode256. 粉刷房子
- quartz各版本MySQL数据库存储建表SQL语句
- ios java 图片上传到服务器,iOS 图片上传服务器
- 类与对象的小结 java 1614782140
- 解决listview点击item失效
- Linux 配置网络
- IDEA中配置Junit4
- 无U盘安装系统(到固态硬盘)教程
- bldc不同载波频率_BLDC的双闭环老调不好,求帮助
- 论文解读笔记:基于深度学习的行为分析综述
- python中as是什么意思_python中with python中with as 是什么意思刚入门求解释!!!
- Java入门需要了解(面向对象之接口-十四)
- React+Dva使用d3绘图
- WARNING: The script markdown_py.exe is installed in......
热门文章
- bilibili弹幕游戏
- 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
- python借助OpenCC实现中文繁体转简体
- 网络用户管理系统php,php之用户管理系统的实现!(从简单到复杂)
- Matlab绘制图像(plot函数)
- Raspberry pi设置Samba
- 程序员面试被问,有没有别家的offer?这个问题怎么回答?
- ios系统怎么编辑html,word转html ios 可编辑
- 羊车门问题。有三扇关闭的门,一扇门背后面停着汽车,其余门后面是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另一扇门,露出门后的山羊,然后允许参赛者更换自己的选
- 检查一个字符串是否为回文 。 回文:正着念与反着念一样,例如:上海自来水来自海上