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 25 Python
零基础写python爬虫之HTTP异常处理
Nov 05 Python
python使用webbrowser浏览指定url的方法
Apr 04 Python
python多进程实现进程间通信实例
Nov 24 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
python 字典修改键(key)的几种方法
Aug 10 Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
python分数表示方式和写法
Jun 26 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
python获取栅格点和面值的实现
Mar 10 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 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 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
python实现zabbix发送短信脚本
2018/09/17 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
实现Python与STM32通信方式
2019/12/18 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
事业单位考核材料
2014/05/21 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
羊脂球读书笔记
2015/06/30 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
nginx.conf配置文件结构小结
2022/04/08 Servers