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实现simhash算法实例
Apr 25 Python
python使用pil生成缩略图的方法
Mar 26 Python
python删除列表内容
Aug 04 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
python实现邮件自动发送
Aug 10 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
使用python turtle画高达
Jan 19 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
python实现学生管理系统开发
Jul 24 Python
利用python 读写csv文件
Sep 10 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里的JS打印函数
2006/10/09 PHP
PHP HTML代码串截取代码
2008/12/29 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
javascript时间函数基础介绍
2013/03/28 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
Python做文本按行去重的实现方法
2016/10/19 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
详解flask表单提交的两种方式
2018/07/21 Python
python实现简单多人聊天室
2018/12/11 Python
解析Python3中的Import
2019/10/13 Python
深入浅析python的第三方库pandas
2020/02/13 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
python 实现简易的记事本
2020/11/30 Python
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
单身联谊活动方案
2014/01/29 职场文书
小学美术教学反思
2014/02/01 职场文书
设备管理实施方案
2014/05/31 职场文书
承租经营合作者协议书
2014/10/01 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
婚礼答谢词范文
2015/09/29 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js