zoukankan      html  css  js  c++  java
  • 神经网络--单层感知器

    前言:

    神经网络是非常重要的且用途广泛,通过模拟人体的处理信息方式来解决问题,下面就来介绍一下单层感知器。

    正文:

    import numpy as np
    import matplotlib.pyplot as plt
    
    #输入数据
    X = np.array([[1,3,3],
                  [1,4,3],
                  [1,1,1],
                  [1,0,2]])
               
     #标签
    Y = np.array([[1],
                  [1],
                  [-1],
                  [-1]])
    #权值初始化,3行1列,取值范围-1到1
    W = (np.random.random([3,1])-0.5)*2
    
    print(W)
    #学习率设置
    lr = 0.11
    #神经网络输出
    O = 0
    #除以x.shape()防止每次更新权值过大
    #给x转置是为了符合矩阵乘法的规范
    def update():
        global X,Y,W,lr
        O = np.sign(np.dot(X,W))
        W_C = lr*(X.T.dot(Y-O))/int(X.shape[0])
        W = W + W_C
    

    每次都会随机出来三个权值:
    [[ 0.00716618]
    [ 0.09579097]
    [ 0.86859556]]

    for i in range(100):
        update()#更新权值
        print(W)#打印当前权值
        print(i)#打印迭代次数
        O = np.sign(np.dot(X,W))#计算当前输出
        #all函数意思是当O与Y结果完全符合时,才返回true
        if(O == Y).all():
            print("Finished")
            print("epoch",i)
            break
    #正样本
    x1 = [3,4]
    y1 = [3,3]
    #负样本
    x2 = [1,0]
    y2 = [1,2]
    
    #计算分界线的斜率以及截距
    k = -W[1]/W[2]
    d = -W[0]/W[2]
    print('k=',k)
    print('d=',d)
    
    xdata = (0,5)
    
    plt.figure()
    plt.plot(xdata,xdata*k+d,'r')
    plt.scatter(x1,y1,c='b')
    plt.scatter(x2,y2,c='y')
    plt.show()
    

    因为每次随机数的权值都不同,所以迭代次数也有所不同,这里就只po出最终图片。
    在这里插入图片描述

    总结:

    这章的总结没有太多,主要有一个公式需要明白:
    在这里插入图片描述
    明白这个公式之后,也就明白了k和b的计算方法。

  • 相关阅读:
    每天更新股票日数据
    爬取赶集网类似数据的几个小技巧
    爬取赶集网二手物品下所有物品的信息
    web.xml常用元素
    web.xml中JSP配置及 EL表达式
    JSP 隐藏对象
    第四章 JSP语法
    1.JSP 简介及工作原理
    js闭包
    面试心经之题目二
  • 原文地址:https://www.cnblogs.com/lqk0216/p/12800267.html
Copyright © 2011-2022 走看看