感知机实现与、或、与非门和异或门
机器学习-感知机【perceptron】
- what is 感知机
- 单层感知机运用实例
- 多层感知机
what is 感知机
感知机接收多个输入信号,输出一个信号。
接收两个信号的感知机,如下图:
x1与x2是输入信号;y是输出信号;
w1与w2是权重。圆圈O代表”神经元”或者”节点”。
神经元被激活:当x1w1+x2w2超过某个界限值时,y才会输出1。
阈值:这里将界限值称为阈值,用θ符号表示。
权重越大,对应该权重的信号的重要性就越高。
由此可以得到感知机的一种数学表示方法:
感知机的另一种数学表示方法:
上式的b称为偏置。感知机计算输入信号和权重的乘积,然后加上偏置,这个值大于0则输出1,否则输出0。
单层感知机运用实例
使用感知机可以实现与、或、与非门。
首先与门,两个都是1,才输出1:
import numpy as npdef AND(x1, x2):x = np.array([x1, x2])w = np.array([0.5, 0.5])b = -0.7tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1if __name__ == '__main__':for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:y = AND(xs[0], xs[1])print(str(xs) + " -> " + str(y))
输出结果:
(0, 0) -> 0
(1, 0) -> 0
(0, 1) -> 0
(1, 1) -> 1
然后是或门,两个输入只要有一个是1,就输出1.
import numpy as npdef OR(x1, x2):x = np.array([x1, x2])w = np.array([0.5, 0.5])b = -0.2tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1if __name__ == '__main__':for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:y = OR(xs[0], xs[1])print(str(xs) + " -> " + str(y))
输出结果:
(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 1
最后是与非门,就是把与的结果取反:
import numpy as npdef NAND(x1, x2):x = np.array([x1, x2])w = np.array([-0.5, -0.5])b = 0.7tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1if __name__ == '__main__':for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:y = NAND(xs[0], xs[1])print(str(xs) + " -> " + str(y))
输出结果:
(0, 0) -> 1
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0
由上面的例子我们可以看出,与、或、与非门是具有相同构造的感知机,区别只在于权重w和偏置b的值不同。
多层感知机
首先来看一下异或逻辑的真值表:
输入x1 | 输入x2 | 输出Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
将他们标在平面坐标系中可发现,任何直线也不能把两类样本分开。
单层感知机的数学表示方法如下:
它的几何意义:w2x1+w2x2+b=0是一条直线,这条直线分割开两个空间,其中一个空间输出1,另一个空间输出0 。
也就是说通过单层感知机,无法把异或逻辑的两类样本分开。
单层感知机只能表示由一条直线分割的空间;非线性空间:曲线分割成的空间。
之前已经用单层感知机实现了与门、与非门、或门,那么实现异或门的话,可以把前面那几个门叠加起来。
x1,x2表示输入,s1表示与非门的输出,s2表示或门的输出,y表示与门的输出
通过观察x1、x2、y的值,发现,符合异或门的输出。
实现异或门的代码:
from and_gate import AND
from or_gate import OR
from nand_gate import NANDdef XOR(x1, x2):s1 = NAND(x1, x2)s2 = OR(x1, x2)y = AND(s1, s2)return yif __name__ == '__main__':for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:y = XOR(xs[0], xs[1])print(str(xs) + " -> " + str(y))
输出结果:
(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0
由上述可知,通过叠加层,感知机能进行更加灵活的表示。如果说通过组合与非门可实现计算机,那么通过组合感知机也可以表示计算机。
已有研究证明,2层感知机可以表示任意函数,但是不容易设计合适的权重和构造。通常用小模块叠加的方法来构造,就比如上面的先实现与门、或门、与非门,再叠加起来实现异或门。
感知机实现与、或、与非门和异或门相关推荐
- 试用与非门和异或门设计一个组合逻辑电路来判断输入的四位二进制数能否被5整除(0可被5整除), 若可被整除则输出F=1, 否则F=0(山东大学二〇二〇年数字电路906综合题第4题)(全网第一手资料)
(15分)4.试用与非门和异或门设计一个组合逻辑电路来判断输入的四位二进制数能否被5整除(0可被5整除), 若可被整除则输出F=1, 否则F=0. 根据题目的描述, 可以得到本题的真值表. 第4题真值 ...
- 感知机实现与门,与非门,或门,异或门
感知机: 感知机接收多个输入信号,输出一个信号.这里所说的"信号"可以想象成电流或河流那样具备"流动性"的东西.像电流流过导线,向前方输送电子一样,感知机的信号 ...
- 【FPGA】Verilog 编码实现:与非门 | 或非门 | 异或门 | NAND/NOR/XOR 行为验证
写在前面:本章主要内容为了解和确认 NAND/NOR/XOR 门的行为,并使用Verilog实现,生成输入信号后通过模拟,验证每个门的操作,并使用 FPGA 来验证 Verilog 实现的电路的行为. ...
- 微电子电路——与非门或非门异或门
1.SPICE电路结构与网表 NAND: 电路结构图 SPICE网表: *NAND gate hspice file .TEMP 25.0000 .option abstol=1e-6 reltol= ...
- MUX实现逻辑功能(反相器/与门/或门/与非门/或非门/异或门/同或门)
- 单层感知机实现与门,或门,与非门双层感知机实现异或门(python)
感知机perceptron算法是Frank Rosenblatt于1957年提出,它是神经网络和深度学习的起源算法. 感知机接受多个信号,输出一个信号,具体更多原理,请参见这篇博文 本文用python ...
- 学习日志(三):感知机
在读这篇文中前可以先读<神经网络:从人脑到人工>这篇文章了解一下相关基础知识! 麦克洛克和皮茨提出的"M-P神经元模型",是对生物大脑的过度简化,但却成功地给我们提 ...
- 深度学习入门07-多层感知机
在上一篇文章中,我们了解到感知机的局限:不能表示异或门.如果我们想要使用感知机表示异或门怎么办呢?下面我们就可以学习到这方面的知识了. 1 已有逻辑门电路的组合 异或门可以通过其他门电路进行表示,我们 ...
- Python 实现异或门逻辑
实现异或门的前提需要 单层的感知机是无法实现的异或门的,原因:单层感知机无法实现分离非线性空间.通过组合感知机(叠加层)就可实现异或门. 首先来理解一下什么是异或门,异代表不同,或代表有一个就 ...
最新文章
- 涨知识!提单及运输业务中常用的一些代码、术语及意义!
- 【theano-windows】学习笔记二十——LSTM理论及实现
- .和- 区别(C++)
- js排序算法详解-快速排序
- 虚拟机vmware硬盘扩容方法
- pfSense多拨网速叠加教程
- haskell 基础题解(19)
- Alphabetic Removals详解(特殊算法巧解)
- strlen函数题目
- yamlip 安装_SpringBoot中yaml配置对象
- 分析一下前段很火的玩客云(区块链相关产品)
- 基于JAVA景区售票系统设计与实现 开题报告
- 会员卡券领取 小程序_新增卡券功能在哪 微信小程序内直接领取卡券方法
- OpenMMLab 实战营打卡 - 第 四 课 目标检测算法基础
- 广工工作室各方向学习指南
- 依据sh_goods的结构与数据,在mydb数据库中创建一张tm_goods表,并将价格在20到50之间的商品价格减5元,库存量再新增300件。
- 【SpringBoot】人工更新SpringBoot项目,Jar包太大问题解决,SpringBoot瘦包
- 一个免费的FLV编码工具(以及免费的FLV播放器)
- 北大自考计算机及应用,北大自考计算机哪个专业好
- cps配置之折淘客篇
热门文章
- Java 邮箱判断 正则表达式
- 第一次创建springboot框架项目
- 单片机四位数加减计算机程序,51单片机简易计算器程序 实现数字的加减乘除运算...
- 利用JQuery插件CleverTabs实现多页签打开效果
- 湖北工业大学计算机专硕学费,2019年湖北工业大学硕士研究生学费奖助政策
- java给你的初步印象_Java之初印象
- java 整数 引用传递_关于Java引用传递的一个困惑?
- 5怎么选国外节点_外卖包装怎么选?这5个技巧要掌握
- c语言编程被当作病毒,为什么这个微不足道的C程序被检测为病毒?
- linux运行搜狗拼音,Linux 搜狗输入法的安装(Ubuntu版)