zoukankan      html  css  js  c++  java
  • 神经网络--线性神经网络---异或问题---代码示例

    ‘’‘’‘’

    依然是单层神经网络

    import numpy as np
    import matplotlib.pyplot as plt
    
    '''
    在上篇博客中,我们实现了简单单层感知机用来分类,但是异或问题不能被解决 
    
    假设我们的数据集依然是x1 ,x2  ,但是我们需要补充更多的输入 x1*x1 ,x1x2 ,x2*x2(平方)
    
    同时 ,线性的函数的激活函数是 y=x 
    
    '''
    
    #输入
    X= np.array([[1,0,0,0,0,0],
                 [1,1,1,1,1,1],
                 [1,1,0,1,0,0],
                 [1,0,1,0,0,1]])
    print("X")
    print(X)
    
    #定义权重
    W = (np.random.random(6)-0.5)*2
    print('W')
    print(W)
    
    #定义标签
    Y= np.array([-1,-1,1,1])
    print('Y')
    print(Y)
    
    #定义学习率
    lr = 0.11
    
    #定义循环次数 ,which not work for this ,
    n = 0
    #更新权重
    def update():
        global W,X,lr,n,Y
        n+=1
        O = np.dot(X,W.T)
        W_D = lr*((Y-O.T).dot(X))/int(X.shape[0])
        W = W + W_D
    
    
    '''
    为什么这里叫梯度下降法 :
    在求W_D的时候我们使用了导数的方法 
    cost function
     
    E = 1/2 * (d-o)*(d-o)  对这个求导   且 o = f(W.TX)    ,这是是对 W 求导 不是 X  ,W 是自变量     lsm 是梯度下降的特殊情况  也就是 激活函数是  y=x
    
    Dert_E = -(dj-oj)f(W.TX)导数 * X
    
    '''
    
    for _ in range(10000):
        update()
        #O = np.sign(np.dot(X,W.T)) this will not work any more since the reslut may like this -0.0001  -0.0001  0.0001  0.0001   ,this abslutely not 收敛
    
    O = np.dot(X,W.T)
    print("The result: ")  # 随着迭代次数的增加,O 的预测结果越接近标签Y
    print(O)
    
    #正样本
    x1 = [1,0]
    y1 = [0,1]
    
    #负样本
    x2 = [0,1]
    y2 = [0,1]
    
    
    # w0+w1x1+w2x2  ..... = 0
    '''
    如果一个二次方程只含有一个未知数 x,那么就称其为一元二次方程,其主要内容包括方程求解、方程图像、一元二次函数求最值三个方面;
    如果一个二次方程含有二个未知数x、y,那么就称其为二元二次方程,以此类推。
    '''
    #定义一个根据X 计算 Y的 函数
    
    def  calculate(x,root):
        a = W[5]
        b = W[2]+x*W[4]
        c = x*x*W[3]+x*W[1]+W[0]
    
        if root ==1:
            return ((-b + np.sqrt(b*b -4*a*c))/(2*a))
        if root ==2:
            return ((-b - np.sqrt(b * b - 4 * a * c)) / (2 * a))
    
    
    xdate = np.linspace(-2,5)
    
    plt.figure()
    
    plt.plot(xdate,calculate(xdate,1),'r')
    plt.plot(xdate,calculate(xdate,2),'r')
    
    plt.plot(x1,y1,'bo')
    plt.plot(x2,y2,'yo')
    
    plt.show()


    ‘’‘’‘’

  • 相关阅读:
    jquery on()动态绑定元素的的点击事件无反应的问题记录
    【分享】开源富文本编辑器之间的较量
    【分享】JS如何为复制的Web文本添加其他信息
    HTML table导出到Excel中的解决办法
    Vue跨门槛系列之实例的阐述
    Vue.js 基本功能了解一下~
    JS数据结构的栈和队列操作
    CSS宽度高度的百分比取值基于谁
    CSS个人笔记
    使用word设置标题级别, 自动生成和大纲对应的多级列表, 自动生成索引目录
  • 原文地址:https://www.cnblogs.com/TendToBigData/p/10501183.html
Copyright © 2011-2022 走看看