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中列表生成式的用法
Mar 31 Python
Python list操作用法总结
Nov 10 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
vscode 远程调试python的方法
Dec 01 Python
Python实现简单文本字符串处理的方法
Jan 22 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
Python assert语句的简单使用示例
Jul 28 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 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关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
Admin generator, filters and I18n
2011/10/06 PHP
基于php权限分配的实现代码
2013/04/28 PHP
php实现的简单日志写入函数
2015/03/31 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
python 将字符串转换成字典dict
2013/03/24 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
python书籍信息爬虫实例
2018/03/19 Python
python实现简易动态时钟
2018/11/19 Python
python编写微信公众号首图思路详解
2019/12/13 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
软件设计的目标是什么
2016/12/04 面试题
一些关于MySql加速和优化的面试题
2014/01/30 面试题
DTD的含义以及作用
2014/01/26 面试题
五年级科学教学反思
2014/02/05 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
人才市场接收函
2015/01/30 职场文书
护林员个人总结
2015/03/04 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
mysql事务对效率的影响分析总结
2021/10/24 MySQL