人工智能实战_第五次作业_田博

项目 内容
这个作业属于哪个课程 人工智能实战2019
这个作业的要求在哪里 第五次作业:实现逻辑与门、逻辑或门
我在这个课程的目标是 了解人工智能,提高编程能力
这个作业在哪个具体方面帮助我实现目标 理解线性二分类

代码

import numpy as np
import matplotlib.pyplot as plt

def ReadData():
    X = np.array([0,0,1,1,0,1,0,1]).reshape(2,4)
    Y = np.array([0,0,0,1])        #逻辑与门
    Y = np.array([0,1,1,1])        #逻辑或门
    return X,Y

def Initialize(num_features):
    W = np.zeros((1,num_features))
    B = np.zeros((1,1))
    eta = 0.1
    max_epoch = 10000
    return W,B,eta,max_epoch

def Sigmoid(z):
    s=1/(1+np.exp(-z))
    return s

def ForwardCalculationBatch(W, B, X):
    Z = np.dot(W, X) + B
    A = Sigmoid(Z)
    return A

def CheckLoss(Y, A, num_example):   
    p1 = 1 - Y
    p2 = np.log(1-A)
    p3 = np.log(A)

    p4 = np.multiply(p1 ,p2)
    p5 = np.multiply(Y, p3)

    LOSS = np.sum(-(p4 + p5))  
    loss = LOSS / num_example
    return loss

def BackPropagationBatch(X, Y, A, m):
    dZ = A - Y
    dB = dZ.sum(axis = 1, keepdims = True)/m
    dW = np.dot(dZ, X.T)/m
    return dW, dB

def UpdateWeights(eta, dW, dB, W, B):
    W = W - eta*dW
    B = B - eta*dB
    return W, B

def ShowResult(X,Y,W,B):
    for i in range(X.shape[1]):
        if Y[i] == 0:
            plt.plot(X[0,i], X[1,i], '.', c='r')
        elif Y[i] == 1:
            plt.plot(X[0,i], X[1,i], 'x', c='g')

    w12 = -W[0,0]/W[0,1]
    b12 = -B[0,0]/W[0,1]

    x = np.linspace(0,1,10)
    y = w12 * x + b12
    plt.plot(x,y)

    plt.axis([-0.1,1.1,-0.1,1.1])
    plt.show()

if __name__ == '__main__':
    X,Y = ReadData()
    num_features = X.shape[0]   
    num_example = X.shape[1]   

    W,B,eta,max_epoch = Initialize(num_features)    
    for epoch in range(max_epoch):
        for k in range(num_example):
            A = ForwardCalculationBatch(W, B, X)
            dW,dB = BackPropagationBatch(X, Y, A, num_example)
            W,B = UpdateWeights(eta, dW, dB, W, B)
        loss = CheckLoss(Y, A, num_example)
        if loss <= 1e-2:
            break

    print('W=',W)
    print("B=",B)
    print('loss=',loss)
    print("epcoh=",epoch)
    ShowResult(X,Y,W,B)

输出结果

逻辑与门


W= [[8.53453131 8.53453131]]
B= [[-12.97250432]]
loss= 0.009999415617868365

逻辑或门


W= [[8.51552387 8.51552387]]
B= [[-3.79206528]]
loss= 0.009998201724120605

猜你喜欢

转载自www.cnblogs.com/lovelyBobbie/p/10672759.html
今日推荐