Python如何实现感知器的逻辑电路


Posted in Python onDecember 25, 2020

在神经网络入门回顾(感知器、多层感知器)中整理了关于感知器和多层感知器的理论,这里实现关于与门、与非门、或门、异或门的代码,以便对感知器有更好的感觉。

此外,我们使用 pytest 框架进行测试。

pip install pytest

与门、与非门、或门

通过一层感知器就可以实现与门、与非门、或门。

先写测试代码 test_perception.py:

from perception import and_operate, nand_operate, or_operate


def test_and_operate():
 """
 测试与门
 :return:
 """
 assert and_operate(1, 1) == 1
 assert and_operate(1, 0) == 0
 assert and_operate(0, 1) == 0
 assert and_operate(0, 0) == 0


def test_nand_operate():
 """
 测试与非门
 :return:
 """
 assert nand_operate(1, 1) == 0
 assert nand_operate(1, 0) == 1
 assert nand_operate(0, 1) == 1
 assert nand_operate(0, 0) == 1


def test_or_operate():
 """
 测试或门
 :return:
 """
 assert or_operate(1, 1) == 1
 assert or_operate(1, 0) == 1
 assert or_operate(0, 1) == 1
 assert or_operate(0, 0) == 0

写完测试代码,后面直接输入命令  pytest -v  即可测试代码。

这三个门的权重和偏置是根据人的直觉或者画图得到的,并且不是唯一的。以下是简单的实现,在 perception.py 中写上:

import numpy as np


def step_function(x):
 """
 阶跃函数
 :param x:
 :return:
 """
 if x <= 0:
  return 0
 else:
  return 1


def and_operate(x1, x2):
 """
 与门
 :param x1:
 :param x2:
 :return:
 """
 x = np.array([x1, x2])
 w = np.array([0.5, 0.5])
 b = -0.7
 return step_function(np.sum(w * x) + b)


def nand_operate(x1, x2):
 """
 与非门
 :param x1:
 :param x2:
 :return:
 """
 x = np.array([x1, x2])
 w = np.array([-0.5, -0.5])
 b = 0.7
 return step_function(np.sum(w * x) + b)


def or_operate(x1, x2):
 """
 或门
 :param x1:
 :param x2:
 :return:
 """
 x = np.array([x1, x2])
 w = np.array([0.5, 0.5])
 b = -0.3
 return step_function(np.sum(w * x) + b)

运行  pytest -v 确认测试通过。

========================================================================== test session starts ===========================================================================
platform darwin -- Python 3.6.8, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 -- /Users/mac/.virtualenvs/work/bin/python3
...
collected 3 items                                      

test_perception.py::test_and_operate PASSED                              [ 33%]
test_perception.py::test_nand_operate PASSED                              [ 66%]
test_perception.py::test_or_operate PASSED                               [100%]

=========================================================================== 3 passed in 0.51s ============================================================================

异或门

Python如何实现感知器的逻辑电路

如上图所示,由于异或门不是线性可分的,因此需要多层感知器的结构。

使用两层感知器可以实现异或门。

修改 test_perception.py 文件,加入异或门的测试代码 :

from perception import and_operate, nand_operate, or_operate, xor_operate

以及

def test_xor_operate():
 """
 测试异或门
 :return:
 """
 assert xor_operate(1, 1) == 0
 assert xor_operate(1, 0) == 1
 assert xor_operate(0, 1) == 1
 assert xor_operate(0, 0) == 0

在 perception.py 文件里加入异或门的函数:

def xor_operate(x1, x2):
 """
 异或门
 :param x1:
 :param x2:
 :return:
 """
 s1 = nand_operate(x1, x2)
 s2 = or_operate(x1, x2)
 return and_operate(s1, s2)

我们通过与非门和或门的线性组合实现了异或门。

运行命令  pytest -v 测试成功。

========================================================================== test session starts ===========================================================================
platform darwin -- Python 3.6.8, pytest-5.1.2, py-1.8.0, pluggy-0.12.0 -- /Users/mac/.virtualenvs/work/bin/python3
...
collected 4 items                                      

test_perception.py::test_and_operate PASSED                              [ 25%]
test_perception.py::test_nand_operate PASSED                              [ 50%]
test_perception.py::test_or_operate PASSED                               [ 75%]
test_perception.py::test_xor_operate PASSED                              [100%]

=========================================================================== 4 passed in 0.60s ============================================================================

原文作者:雨先生
原文链接:https://www.cnblogs.com/noluye/p/11465389.html  
许可协议:知识共享署名-非商业性使用 4.0 国际许可协议

以上就是Python如何实现感知器的逻辑电路的详细内容,更多关于python 感知器的逻辑电路的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用random和tertools模块解一些经典概率问题
Jan 28 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
Python如何快速实现分布式任务
Jul 06 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python OS模块实例详解
Apr 15 Python
解决yum对python依赖版本问题
Jul 05 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
python全局变量引用与修改过程解析
Jan 07 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 Python
python实现学生信息管理系统源码
Feb 22 Python
使用Python实现音频双通道分离
Dec 25 #Python
Python用户自定义异常的实现
Dec 25 #Python
Django前后端分离csrf token获取方式
Dec 25 #Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 #Python
python语言time库和datetime库基本使用详解
Dec 25 #Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 #Python
用python对excel进行操作(读,写,修改)
Dec 25 #Python
You might like
PHP Global定义全局变量使用说明
2013/08/15 PHP
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
Node.js事件驱动
2015/06/18 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
python直接访问私有属性的简单方法
2016/07/25 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
Android面试题附答案
2014/12/08 面试题
商务英语本科生的自我评价分享
2013/11/15 职场文书
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
给老师的一封建议书
2014/03/13 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
欢迎新生标语
2014/10/06 职场文书
团代会闭幕词
2015/01/28 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python