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的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
Jul 20 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
Python常用特殊方法实例总结
Mar 22 Python
Python3.5文件修改操作实例分析
May 01 Python
用python的turtle模块实现给女票画个小心心
Nov 23 Python
numpy:找到指定元素的索引示例
Nov 26 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Anaconda+Pycharm环境下的PyTorch配置方法
Mar 13 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
利用django创建一个简易的博客网站的示例
Sep 29 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 分库分表hash算法
2009/11/12 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
php自定义apk安装包实例
2014/10/20 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
Bootstrap基础学习
2015/06/16 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
axios简单实现小程序延时loading指示
2018/07/30 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
python实现多线程的两种方式
2016/05/22 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
大学本科毕业生的自我鉴定
2013/11/26 职场文书
大学毕业生的自我鉴定
2013/11/30 职场文书
员工评语范文
2014/12/31 职场文书
社区国庆节活动总结
2015/03/23 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书