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学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
python自动化unittest yaml使用过程解析
Feb 03 Python
python中rc1什么意思
Jun 19 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 Python
python自动化之如何利用allure生成测试报告
May 02 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 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
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
php判断访问IP的方法
2015/06/19 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
js实现倒计时关键代码
2017/05/05 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
基于tensorflow加载部分层的方法
2018/07/26 Python
Django中的用户身份验证示例详解
2019/08/07 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
迎国庆演讲稿
2014/09/15 职场文书
国庆横幅标语
2014/10/08 职场文书
法人身份证明书
2015/06/18 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android