• 图像处理与计算机视觉--第七章-神经网络-单层感知器


    1.单层感知器原理介绍

        1.单层感知器是感知器中最简单的一种,有单个神经元组成的单层感知器只能用于解决线性可分的二分性问题
        2.在空间中如果输入的数据是可分的,感知器相当于将输入的数据在空间中分为两类,已经证明,如果线性可分则算法一定收敛。
        3.单层感知器是指只有一层处理单元的感知器,其中输入层没有处理数据的能力,输入层有n个神经元结点,每个结点接受一个输入信号xi,输入层与输出层之前
          有权重w,将每个结点组成的输入矩阵和权值矩阵相乘,得到一个数,将这个数作为净输入传递给神经元细胞,再将净输入代入神经元细胞的激活函数中,并且在
          神经元中还有一个外部偏置b,激活函数在这里一般采用符号函数,然后输出一个数。
    
    • 1
    • 2
    • 3
    • 4
    • 5

      下图是一个简单的感知器模型图:

                 在这里插入图片描述
      在输出层的每一个节点上接受来自输入层的加权和作为输出层的净输入如下所示:
    n e t j ′ = ∑ i = 1 n w i j x i \mathrm{net}_{j}^{\prime}=\sum_{i=1}^{n}w_{ij}x_{i} netj=i=1nwijxi
    输出的值由激活函数决定:
    y = s g n ( ∑ i = 1 N ω i x i + b ) y=\mathrm{sgn}\Bigg(\sum_{i=1}^N\omega_ix_i+b\Bigg) y=sgn(i=1Nωixi+b)

    2.单层感知器算法流程

      单层感知器算法的流程如下所示:
    在这里插入图片描述

    算法注意事项:
    1.L1为一类,L2为另一类,单层感知器只能解决二分类的一般问题。
    2.beta表示学习率,它的值决定了误差对权值的影响大小,值不应该过大,以便为输入向量提供一个比较稳定的权值估计;值也不能过小,
    3.收敛终止条件:
       1.当权值向量已经能正确实现分类时,算法就收敛终止。
       2.计算时收敛条件通常是:
             (1)理想值和计算得出的值得差小于一个提前的误差阈值。
             (2)权值两次变化的值小于一个提前设定的误差阈值。
             (3)设定一个最大迭代数M,达到这个值,即使没有完成,也必须收敛。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.单层感知器算法实现

    """
    @单层感知器的实现
    created by ZhongYan Zeng
    2023/10/9/14/09
    """
    #单层感知器
    import numpy as np
    import matplotlib.pyplot as plt
    # 支持中文
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
    #2.更新函数
    def update_weight(X,Y,W,beta,iteration):
        iteration=iteration+1
        y=np.dot(X,W)
        result_sgn=np.sign(y)
        w_delta=beta*((Y-result_sgn).dot(X))
        W=W+w_delta
        return W,iteration
    #3.迭代求解过程
    def sovle_iteration(X,d,w,beta,iteration,iteration_max):
        for i in range(iteration_max):
            w,iteration=update_weight(X,d,w,beta,iteration)
            print(w)
            print(iteration)
            result=np.sign(np.dot(X,w))
            if(result==d).all():
                print("完成")
                print("迭代次数:",iteration)
                break
        return w,iteration
    def draw_picture(w,iteration):
        k=-w[1]/w[2]
        b=-w[0]/w[2]
        print("斜率k=",k)
        print("截距b=",b)
        print("线性表达式:y={:.2f}x+{:.2f}".format(k,b))
        k=round(k,2)
        b=round(b,2)
        #可视化绘图
        x=[2,4,5]
        y=[3,3,8]
        fun_x=np.linspace(0,9,100)
        fun_y=k*fun_x+b
        plt.plot(fun_x,fun_y,color='r',label='y=1.{}x+{}'.format(k,b))
        plt.scatter(x[0:2],y[0:2],color='b')
        plt.scatter(x[2],y[2],color='y')
        plt.xlim(0,9)
        plt.ylim(0,15)
        plt.legend()
        plt.title("单层感知器分类结果图")
        plt.show()
    
    if __name__=='__main__':
        #1.定义参数和变量
        X=np.array([[1,2,3],[1,4,3],[1,5,8]])#第一项为偏置项1
        d=np.array([1,1,-1])#期望感知器分类结果
        beta=0.1#学习率为0.1
        iteration=0#迭代次数为0
        w=(np.random.random(3)-0.5)*2
        iteration_max=100
        w,iteration=sovle_iteration(X,d,w,beta,iteration,iteration_max)
        draw_picture(w,iteration)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    4.单层感知器效果展示

                         在这里插入图片描述
    在这里插入图片描述

    5.参考文章与致谢

    本章内容的完成离不开大佬文章的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
    1.单层感知器以及python实现:https://blog.csdn.net/qq_42633819/article/details/81588084
    如果大家这这篇blog中有什么不明白的可以去他的专栏里面看看,内容非常全面,应该能够有比较好的解答。
    在文章的最后再次表达由衷的感谢!!
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    js方法:函数作为对象的属性
    职业了解|03师范生的编制教师之路
    JAVASE 游戏
    从低代码的前世今生,看软件开发趋势
    xml特殊字符问题
    clickhouse学习之路----clickhouse的特点及安装
    JavaScript对象详解,js对象属性的添加
    Linux常见的物理设备数据备份和负载均衡模式
    spring官方文档中文
    vue数据代理、劫持、监视(实现响应式)
  • 原文地址:https://blog.csdn.net/m0_71819746/article/details/133700683