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使用正则匹配实现抓图代码分享
Apr 02 Python
Python性能提升之延迟初始化
Dec 04 Python
Python 加密的实例详解
Oct 09 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
Python代码缩进和测试模块示例详解
May 07 Python
python实现录音小程序
Oct 26 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
python中的tcp示例详解
Dec 09 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
python math模块的基本使用教程
Jan 16 Python
python制作微博图片爬取工具
Jan 16 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获取文件名后缀
2013/06/09 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
vue-router传参用法详解
2019/01/19 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
python ElementTree 基本读操作示例
2009/04/09 Python
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python文件处理
2016/02/29 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
由Python编写的MySQL管理工具代码实例
2019/04/09 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
Python第三方库安装缓慢的解决方法
2021/02/06 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
开办化妆品公司创业计划书
2013/12/26 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
邀请函模板
2015/02/02 职场文书
推销搭讪开场白
2015/05/28 职场文书
总结Python常用的魔法方法
2021/05/25 Python
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android