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入门_条件控制(详解)
May 16 Python
Django中的文件的上传的几种方式
Jul 23 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
Python绘制组合图的示例
Sep 18 Python
Django 实现jwt认证的示例
Apr 30 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/04/09 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
python实现超简单端口转发的方法
2015/03/13 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python实现八大排序算法
2016/08/13 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
Python的log日志功能及设置方法
2019/07/11 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
Django分组聚合查询实例分享
2020/04/29 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
数据库方面面试题
2012/04/22 面试题
本科毕业生求职自荐信
2014/02/03 职场文书
风险评估实施方案
2014/03/09 职场文书
雷锋的故事观后感
2015/06/10 职场文书
2015年暑期见闻
2015/07/14 职场文书
清明节随笔
2015/08/15 职场文书
田径运动会广播稿
2015/08/19 职场文书