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的@property装饰器的用法
Apr 28 Python
python自定义类并使用的方法
May 07 Python
Python深入06——python的内存管理详解
Dec 07 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
Python 查找字符在字符串中的位置实例
May 02 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
Python解压 rar、zip、tar文件的方法
Nov 19 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
使用python处理题库表格并转化为word形式的实现
Apr 14 Python
如何写python的配置文件
Jun 07 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 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
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
使用js 设置url参数
2013/07/08 Javascript
node.js中的buffer.Buffer.isEncoding方法使用说明
2014/12/14 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
Python 学习笔记
2008/12/27 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
详解Python验证码识别
2016/01/25 Python
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
全民健身日活动方案
2014/01/29 职场文书
教育实习指导教师评语
2014/12/31 职场文书
SQL语句多表联合查询的方法示例
2022/04/18 MySQL
Java对文件的读写操作方法
2022/04/29 Java/Android