• 【深度学习入门】- 用电路思想解释感知机


    🤖🤖🤖🤖 欢迎浏览本博客 🤖🤖🤖🤖
    😆😆😆😆😆😆😆大家好,我是:我菜就爱学😆😆😆😆
    😆😆😆一名刚刚入行小白👻👻
    👻👻从事方向:计算机视觉
    🔔🔔我菜就爱学,分享有误,欢迎大佬指出🔔🔔
    🌏🌏🌏本篇介绍:单层感知机、多层感知机


    1 感知机是什么

    感知机接收多个输入信号,输出一个信号。感知机信号只有“流/不流(0/1)"两种取值。0对应“不传递信号”,1对应“传递信号”

    如下:是一个接收两个输入信号的感知机例子。x1,x2是输入信号,y是输出信号,w1、w2是权重。O为神经元或者节点。输入信号被送往神经元时,会被分布乘以相对的权重(权重越大,对该权重的信号越重要)。然后神经元计算传送过来的总和,当总和超过某个界限时,输出1,该种情况也叫“神经元激活。

    在这里插入图片描述

    2 简单逻辑电路

    2.1 与门

    说明:与门是有两个输入和一个输出的门电路。真值表如下。满足真值表的w1、w2、θ的取值如: (w1, w2,θ)=(0
    .5,0.5,7)或者(0.5, 0.5,0.8)。仅x1和x*2同时为1,信号的加权总和才会超过给定的阈值 θ 。

    在这里插入图片描述

    2.2 与非门

    说明:与非门就是颠倒了与门的输出。真值表如下。(w1, w2, θ)=(−0.5,0.5,
    0
    .7)

    在这里插入图片描述

    2.3 或门

    说明:或门是只要有一个输入信号是1,输出就是1。真值表如下。

    在这里插入图片描述

    3 感知机的实现

    3.1 简单的实现

    说明:按照下面程序,简单的实现与门的感知机代码

    def AND(x1,x2):
        w1,w2,theta=0.5,0.5,0.7
        tmp=x1*w1+x2*w2
        if tmp<=theta:
            return 0
        else:
            return 1
    
    print(AND(0,0))
    print(AND(1,0))
    print(AND(0,1))
    print(AND(1,1))
    '''
    0
    0
    0
    1
    '''
    '
    运行
    3.2 导入权重和偏置

    说明:把上面的θ换成b,b作为偏置,w1和w2依然函数权重。感知机会计算输入信号和权重的乘积,然后加上偏置。如果这个值大于0则输出1,否则输出0。具体的说:w1和w2是控制输入信号的重要性的参数,而偏置是调整神经元被激活的容易程度(输出信号为1)的参数。比如,若b=-0.1,则输入信号的权重超过0.1,神经元就会被激活。但如果b=-20.0,则输入信号的加权超过20才会被激活。

    在这里插入图片描述

    #	Numpy数组的乘法中,当两个数组的元素个数相同时,各个元素分布相乘。
    x=np.array([0,1])   #x1=0,x2=1
    w=np.array([0.5,0.5])#  w1=0.5 w2=0.5
    b=-0.7
    y=np.sum(w*x)+b
    print(y)
    # -0.19999999999999996
    

    1)使用权重和偏置实现与门

    def AND():
        x = np.array([0, 1])  # x1=0,x2=1
        w = np.array([0.5, 0.5])  # w1=0.5 w2=0.5
        b=-0.7
        tmp=np.sum(x*w)+b
        if tmp<=0:
            print(0)
        else:
            print(1)
    
    AND()
    # 0
    

    4 感知机的局限性

    4.1 异或门

    说明:用上面介绍的感知机对应异或门的话是无法实现的。如下是异或门的真值表。

    在这里插入图片描述

    假设权重参数设置为:(b, w1, w2)=(0.5, 1.0,1.0),用或门限量解释,在(x1,x2)=(0,0)时输出0,在(x1,x2)=(0,1)或者(1,0)或者(1,1)时输出1。

    如果变成异或门的话,(x1,x2)=(1,1)时输出0,此时无法做到一条线把0和1分割开。

    4.2 线性和非线性

    说明:感知机的局限性就是在于它只能表示由一条直线分割的空间。若用如下的分割方法,由曲线分割而成的空间为非线性空间,上面或门由直线分割的而形成的空间称为线性空间。

    5 多层感知机

    说明:虽然感知机不能表示异或门,但是它有叠加层的特性。可以通过叠加层的特性来表示异或门。

    5.1 用已有门路组成异或门

    如下:分别表示与门、与非门和或门

    在这里插入图片描述

    然后,组合成为异或门

    在这里插入图片描述

    在这里插入图片描述

    5.2 异或门代码实现

    说明:代码实现了异或门,异或门是一种多层结构的神经网络。也叫2层感知机。

    def AND(x1,x2):
        x = np.array([x1, x2])
        w = np.array([0.5, 0.5])
        b=-0.7
        tmp=np.sum(x*w)+b
        if tmp<=0:
            return 0
        else:
            return 1
    
    def NAND(x1,x2):
        x = np.array([x1, x2])
        w = np.array([-0.5, -0.5])
        b = 0.7
        tmp = np.sum(x * w) + b
        if tmp<=0:
            return 0
        else:
            return 1
    
    def OR(x1,x2):
        x = np.array([x1, x2])
        w = np.array([0.5, 0.5])
        b = -0.2
        tmp = np.sum(x * w) + b
        if tmp<=0:
            return 0
        else:
            return 1
    def XOR(x1,x2):
        s1=NAND(x1,x2)
        s2=OR(x1,x2)
        y=AND(s1,s2)
        return y
    print(XOR(0,0))
    print(XOR(0,1))
    print(XOR(1,0))
    print(XOR(1,1))
    '''
    输出:
    0
    1
    1
    0
    '''
    

  • 相关阅读:
    聊聊更新表时的隐式提交
    MATLAB并行基础
    高精读整数加法【循环总结】
    红海云签约深圳天使母基金,数智引领金融行业人力资源数字化转型
    使用easyui-treegrid数据层级展示问题
    【知识分享】C语言应用-易错篇
    IntelliJ IDEA远程调试:使用IDEA Remote Debug进行高效调试的指南
    MySQL数据库 || 增删改查操作详解
    信息系统项目管理师论文
    知识增强语言模型提示 零样本知识图谱问答10.8+10.11
  • 原文地址:https://blog.csdn.net/qq_44859533/article/details/127110569