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 Opencv将图片转为字符画
Feb 19 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
关于python中的xpath解析定位
Mar 06 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
Jun 21 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查询mssql出现乱码的解决方法
2014/12/29 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
js实现时钟定时器
2020/03/26 Javascript
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
python写程序统计词频的方法
2019/07/29 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
地理教师岗位职责
2014/03/16 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
文体活动总结
2015/02/04 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
redis缓存存储Session原理机制
2021/11/20 Redis