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利用elaphe制作二维条形码实现代码
May 25 Python
简单使用Python自动生成文章
Dec 25 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
Python中的fileinput模块的简单实用示例
Jul 09 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
Python实现带下标索引的遍历操作示例
May 30 Python
python匿名函数的使用方法解析
Oct 10 Python
Python列表切片常用操作实例解析
Mar 10 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Python如何输出整数
Jun 07 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Python实现视频中添加音频工具详解
Dec 06 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基础学习笔记
2007/03/18 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
就业意向协议书
2015/01/29 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python