BP神经网络求解异或算法

目录

    • BP神经网络求解异或算法
  • 一、BP神经网络
  • 二、激活函数
  • 三、异或求解

一、BP神经网络

BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。
正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。

误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息

下面以单隐藏层为例,进行输出值的公式推导,其结构示意图如下:

在实际实验过程中我们会依据预测输出值o1o_1o1​与实际输出值的误差或者自定义学习率,对前面计算过程中的W11W_{11}W11​ W21W_{21}W21​ V11V_{11}V11​ V12V_{12}V12​ V21V_{21}V21​ 以及V22V_{22}V22​进行新的值的计算。

二、激活函数

在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘

如图所示,如果没有激活函数fff的值就是x1x_1x1​ x2x2x2与相关系数矩阵的乘积之和,是线性的,对于非线性函数的预测不能很好地体现。
针对这种情况我们引入了激活函数,激活函数是非线性函数,常见的激活函数如下:
(1)Sigmoid函数
Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间,公式如下:
f(x)=11+e−xf(x)= \frac{1}{1+e^{-x}} f(x)=1+e−x1​

(2)Tanh函数
Tanh是双曲函数中的一个,Tanh()为双曲正切。在数学中,双曲正切“Tanh”是由基本双曲函数双曲正弦和双曲余弦推导而来。公式如下:
f(x)=ex−e−xex+e−xf(x)= \frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+e−xex−e−x​

(3)ReLU函数
Relu激活函数(The Rectified Linear Unit),用于隐层神经元输出。公式如下:
f(x)=max(0,x)f(x)=max(0,x)f(x)=max(0,x)

三、异或求解

该方法中,我采用的RELU函数作为激活函数,程序代码如下:

import numpy as np def com(x, deriv = False):if(deriv == True):return x*(1-x)else:return 1/(1+np.exp(-x))#输入数据
x = np.array([[0,0],[0,1],[1,0],[1,1]])#输出数据
y = np.array([[0],[1],[1],[0]])#定义学习率
#learning_rate = 1e-6#卷积计算权重初始值随机化
w1 = 2*np.random.random((2,4))-1
w2 = 2*np.random.random((4,2))-1
w3 = 2*np.random.random((2,1))-1for i in range(20000):#根据初始权重得到隐藏层数据h1 = com(np.dot(x,w1))#矩阵中小于0的数据为0,大于0的数据不改变h_relu = np.maximum(h1, 0)h2 = com(np.dot(h_relu,w2))h3 = com(np.dot(h2,w3))#误差h3_loss = y - h3h3_grad = h3_loss*com(h3,deriv = True)h2_loss = h3_grad.dot(w3.T)h2_grad = h2_loss*com(h2,deriv = True)h1_loss = h2_grad.dot(w2.T)h1_grad = h1_loss*com(h1,deriv = True)w3 += h2.T.dot(h3_grad)w2 += h1.T.dot(h2_grad)w1 += x.T.dot(h1_grad)print("out after training")
print(h3)

得到程序运行结果如下:

由输出结果可知,预测结果比较符合实际。

BP神经网络求解异或算法相关推荐

  1. 遗传+BP神经网络 求解故障诊断问题(python)

    遗传+BP神经网络 求解拖拉机齿轮箱故障诊断问题(python3) 通过学习书籍<matlab智能优化算法30个案例分析(第2版)>中有关神经网络算法的编程知识,初步了解神经网络的编码思想 ...

  2. BP神经网络实现异或功能

    环境介绍 语言:Py,版本3.6 环境:Anaconda3 (64-bit), 编译器:Spyder,Jupyter Notebook等 实现功能:使用BP神经网络实现异或功能 神经网络搭建的思想 一 ...

  3. BP神经网络分类以及对算法进行改进—MATLAB实现

    文章目录 一 BP神经网络介绍 二 案例应用-语音特征信号识别 2.1 案例说明 2.2 MATLAB实现 2.2.1 数据归一化 2.2.2 编程实现 2.2.2.1数据选择和归一化 2.2.2.2 ...

  4. 机器学习/深度学习测试题(二)—— 单层线性神经网络求解异或问题

    1. 输入样本的处理 听起来似乎是一个比较奇怪的说法,不对输入做任何处理的话,是无法求解异或问题的.这里提供一种对输入进行处理的可行方式:对输入样本做必要的升维处理,其实质是引入非线性分量. 如下图所 ...

  5. m基于ESN+BP神经网络的数据预测算法matlab仿真,测试数据为太阳黑子变化数据

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在人工神经网络的发展历史上,感知机(Multilayer Perceptron,MLP)网络曾对人工 ...

  6. MATLAB中BP神经网络用于回归拟合算法实现(另附GRNN代码)

    BP神经网络:是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络.神经网络是把生活中的常见情节推 ...

  7. 基于GA优化BP神经网络的传感器故障诊断算法matlab仿真

    目录 一.理论基础 二.核心程序 三.仿真测试结果 一.理论基础 1.做优化要先明白优化的结果是什么? 使得网络参数配置最优,测试集预测误差最小--适应度函数 2.可以通过改变什么来使得网络结果不同? ...

  8. python bp神经网络 异或_基于python的BP神经网络及异或实现过程解析

    BP神经网络是最简单的神经网络模型了,三层能够模拟非线性函数效果. 难点: 如何确定初始化参数? 如何确定隐含层节点数量? 迭代多少次?如何更快收敛? 如何获得全局最优解? ''' neural ne ...

  9. 训练三层BP神经网络实现异或运算 Python 代码实现

    本文主要使用下面的网络结构来完成 异或运算 异或运算 : 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0 . 上图的公式推导可以参考博文: 三层神经网络前向后向传播示意图 imp ...

最新文章

  1. 如何生成存储器配置文件?
  2. 利用ISA2006封杀QQ2010
  3. Good Bye 2018题解
  4. classes maven 为空 打包_Maven打包:将classes打成Jar,之后打到War中(或打成jar),过滤指定目录。...
  5. python定时任务是异步的吗_python异步实现定时任务和周期任务的方法
  6. 小学音乐教学和计算机的融合,【多媒体技术论文】小学音乐多媒体教学融入策略问题(共5881字)...
  7. 高级着色语言HLSL入门(5)
  8. Java历史版本官方下载地址(Java 6、Java 7)
  9. SQL Server 2008 R2 建立数据库,建立表,建立存储过程
  10. ZipArchive
  11. 搜人2013笔试题(java)
  12. jQuery实现button按钮提交表单
  13. html页面睡眠函数,JavaScript sleep睡眠函数
  14. Flutter6,移动设备开发网易云音乐app开发说明
  15. CrownCAD 注册/登录
  16. error CS0227: Unsafe code may only appear if compiling
  17. “黑客帝国”只是另一个幻想,但我们痴迷于此
  18. 关于char是否能表示一个中文
  19. 镭速软件如何使用文件同步功能?
  20. 一键代理浏览器_支持IPv6的防关联指纹浏览器 VMLogin 支持模拟电脑名称、支持修改MAC地址、支持模拟真人输入、支持自定义经纬度...

热门文章

  1. 解决kubernetes启动容器时,容器一直是ContainerCreating不能running
  2. 蓝牙开发那些事儿(3)——看看空中包
  3. (零基础)入门python学习四步骤,附上Python全栈学习路线大刚!
  4. C语言LMS双麦克风消噪算法,基于两个时域LMS算法双麦克风系统分析.doc
  5. outlook 签名_如何在Outlook 2013中创建新签名
  6. 2、面向对象的思维(与结构化思维比较)
  7. Java集合框架全解
  8. 微信小程序入门---01
  9. 构建linux图形安装程序,Scientific Linux 5.5 图形安装教程
  10. B站大佬用我的世界搞出卷积神经网络,LeCun转发!爆肝6个月,播放破百万