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 difflib模块示例讲解
Sep 13 Python
python3利用Socket实现通信的方法示例
May 06 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
Django 返回json数据的实现示例
Mar 05 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 Python
深入了解NumPy 高级索引
Jul 24 Python
深入分析python 排序
Aug 24 Python
通俗讲解python 装饰器
Sep 07 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获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python生成随机密码
2015/03/10 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
python批量处理文件或文件夹
2020/07/28 Python
Python用input输入列表的实例代码
2020/02/07 Python
python爬虫可以爬什么
2020/06/16 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
护理专业学生的求职信范文
2013/12/11 职场文书
营销学习心得体会
2014/09/12 职场文书
高三英语教学计划
2015/01/23 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书