在神经网络入门回顾(感知器、多层感知器)中整理了关于感知器和多层感知器的理论,这里实现关于与门与非门或门异或门的代码,以便对感知器有更好的感觉。

此外,我们使用 pytest 框架进行测试。

pip install pytest

与门、与非门、或门

通过一层感知器就可以实现与门与非门或门

先写测试代码 test_perception.py:

 1 from perception import and_operate, nand_operate, or_operate
 2
 3
 4 def test_and_operate():
 5     """
 6     测试与门
 7     :return:
 8     """
 9     assert and_operate(1, 1) == 1
10     assert and_operate(1, 0) == 0
11     assert and_operate(0, 1) == 0
12     assert and_operate(0, 0) == 0
13
14
15 def test_nand_operate():
16     """
17     测试与非门
18     :return:
19     """
20     assert nand_operate(1, 1) == 0
21     assert nand_operate(1, 0) == 1
22     assert nand_operate(0, 1) == 1
23     assert nand_operate(0, 0) == 1
24
25
26 def test_or_operate():
27     """
28     测试或门
29     :return:
30     """
31     assert or_operate(1, 1) == 1
32     assert or_operate(1, 0) == 1
33     assert or_operate(0, 1) == 1
34     assert or_operate(0, 0) == 0

写完测试代码,后面直接输入命令  pytest -v  即可测试代码。

这三个门的权重偏置是根据人的直觉或者画图得到的,并且不是唯一的。以下是简单的实现,在 perception.py 中写上:

 1 import numpy as np
 2
 3
 4 def step_function(x):
 5     """
 6     阶跃函数
 7     :param x:
 8     :return:
 9     """
10     if x <= 0:
11         return 0
12     else:
13         return 1
14
15
16 def and_operate(x1, x2):
17     """
18     与门
19     :param x1:
20     :param x2:
21     :return:
22     """
23     x = np.array([x1, x2])
24     w = np.array([0.5, 0.5])
25     b = -0.7
26     return step_function(np.sum(w * x) + b)
27
28
29 def nand_operate(x1, x2):
30     """
31     与非门
32     :param x1:
33     :param x2:
34     :return:
35     """
36     x = np.array([x1, x2])
37     w = np.array([-0.5, -0.5])
38     b = 0.7
39     return step_function(np.sum(w * x) + b)
40
41
42 def or_operate(x1, x2):
43     """
44     或门
45     :param x1:
46     :param x2:
47     :return:
48     """
49     x = np.array([x1, x2])
50     w = np.array([0.5, 0.5])
51     b = -0.3
52     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 ============================================================================

异或门

如上图所示,由于异或门不是线性可分的,因此需要多层感知器的结构。

使用两层感知器可以实现异或门。

修改 test_perception.py 文件,加入异或门的测试代码 :

from perception import and_operate, nand_operate, or_operate, xor_operate

以及

def test_xor_operate():"""测试异或门:return:"""assert xor_operate(1, 1) == 0assert xor_operate(1, 0) == 1assert xor_operate(0, 1) == 1assert 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 国际许可协议

参考

  • 神经网络入门回顾(感知器、多层感知器)
  • 《Neural networks and deep learning》by Aurélien Géron
  • 《Deep learning from scratch》by 斋藤康毅

转载于:https://www.cnblogs.com/noluye/p/11465389.html

Python实现感知器的逻辑电路(与门、与非门、或门、异或门)相关推荐

  1. Python 实现感知器模型、两层神经网络

    python 3.4 因为使用了 numpy 这里我们首先实现一个感知器模型来实现下面的对应关系 [[0,0,1], --- 0 [0,1,1], --- 1 [1,0,1], --- 0 [1,1, ...

  2. python 实现感知器(一)

    基础知识不再重述,可参考https://www.zybuluo.com/hanbingtao/note/433855 直接贴出文章里的代码以供参考学习,这里主要是为了锻炼自己的编写代码的能力,之前一直 ...

  3. python实现感知器算法

    在1943年,沃伦麦卡洛可与沃尔特皮茨提出了第一个脑神经元的抽象模型,简称麦卡洛可-皮茨神经元(McCullock-Pitts neuron)简称MCP,大脑神经元的结构如下图.麦卡洛可和皮茨将神经细 ...

  4. python 多层感知器 sklearn.neural_network MLPClassifier.predict()函数

    官方doc: Signature: mlp.predict(X) Docstring: Predict using the multi-layer perceptron classifier Para ...

  5. python实现感知器

  6. 神经网络入门回顾(感知器、多层感知器)

    神经网络属于"联结主义",和统计机器学习的理论基础区别还是很不一样. 以我自己的理解,统计机器学习的理论基于统计学,理论厚度足够强,让人有足够的安全感:而神经网络的理论更侧重于代数 ...

  7. 【Python-ML】感知器学习算法(perceptron)

    1.数学模型   2.权值训练 3.Python代码 感知器收敛的前提是两个类别必须是线性可分的,且学习速率足够小.如果两个类别无法通过一个线性决策边界进行划分,要为模型在训练集上的学习迭代次数设置一 ...

  8. AI实战:从入门到精通系列——用感知器实现情感分类(一)

    前言 人工智能的第一次高潮始于上世纪50年代.在算法方面,感知器数学模型被提出用于模拟人的神经元反应过程,并能够使用梯度下降法从训练样本中自动学习,完成分类任务. 感知器 感知器算法在上个世纪50-7 ...

  9. 感知器python代码

    感知器属于机器学习的入门算法了,具体的理论知识不细讲了.只说下里面涉及到的核心知识: 权重更新公式:w=wi+▲wi          b=b+▲b其中▲wi=n(t-y)x   b=n(t-y) n ...

最新文章

  1. 人工智能和机器学习技术推动企业发展
  2. spring原始注解
  3. debian常用工具所在的包
  4. Spring Data JPA教程第一部分:配置
  5. springcloud云服务架构-HongHu commonservice-eureka项目构建过程
  6. 李沐分享斯坦福2021秋季新课:实用机器学习
  7. java四个基本步骤_javac编译的四个主要的流程
  8. 【干货】DTC模式如何引领消费品牌企业实现创新-罗兰贝格.pdf
  9. qt扫雷鼠标c语言中文网,基于C语言实现的扫雷游戏代码
  10. 安装McAfee 8.7i 提示错误1920怎么办?
  11. office2003 office2007同时安装 配置问题的解决
  12. 利用python操作mrjob实例---wordcount
  13. 有的编译器,for (i=1; i 《 1; i++)会执行循环体
  14. ofo显示服务器故障,ofo服务器超时
  15. 一、linux内核源码分析(内核源码结构组成)
  16. keyshot怎么批量渲染_怎样用keyshot 5.0快速渲染出高质量图
  17. Python数据分析基础(2)
  18. 感觉最近自己太张狂了一些。
  19. Excel中使用名称定义常数
  20. 记一次使用百度云加速开启ssl后网站打不开的解决办法

热门文章

  1. 走在spring的路上。。。。
  2. 综合日语第一册第十四课
  3. 一像素约束(选中所需约束,切换到类处,选择此类,运行时就是0.5的约束)
  4. maven snapshot和release版本号之间的差
  5. js-this作用域
  6. ASP.NET入门教程:服务器控件
  7. 两种设置安卓背景图片的方法
  8. 妙笔生花!文字图像图形生成技术研究进展
  9. KDD2018 阿里巴巴论文揭示自家大规模视觉搜索算法
  10. 收藏 | 机器学习中需要了解的 5 种采样方法