人工智能实战2019第5次作业-15041025-陶恺

一、绪论

项目 内容
这个作业属于哪个课程 [人工智能](https://edu.cnblogs.com/campus/buaa/BUAA-AI-2019)
这个作业的要求在哪里 [作业要求](https://edu.cnblogs.com/campus/buaa/BUAA-AI-2019/homework/2900)
我在这个课程的目标是 学习了解应用人工智能
这个作业在哪个具体方面帮助我实现目标 学习分类法

二、代码实现

import numpy as np
import matplotlib.pyplot as plt

def ReadData_and():
    X = np.array([1,1,0,0,1,0,1,0]).reshape(2,4)
    Y = np.array([1,0,0,0]).reshape(1,4)
    return X,Y

def ReadData_or():
    X = np.array([1,1,0,0,1,0,1,0]).reshape(2,4)
    Y = np.array([1,1,1,0]).reshape(1,4)
    return X,Y

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

def ForwardCalculation(W,B,X):
    z = np.dot(W,X) + B
    a = Sigmoid(z)
    return a

def BackPropagation(X,y,A):
    m = X.shape[1]
    dZ = A - y
    dB = dZ.sum(axis=1, keepdims=True)/m
    dW = np.dot(dZ,X.T)/m
    return dW, dB

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

def CheckLoss(W, B, X, Y):
    count = X.shape[1]
    A = ForwardCalculation(W,B,X)
    p0 = np.multiply(1-Y,np.log(1-A))
    p1 = np.multiply(Y,np.log(A))
    LOSS = np.sum(-(p0 + p1))
    loss = LOSS / count
    return loss

if __name__ == '__main__':
#逻辑或门
    X, Y = ReadData_or()
    num_features = X.shape[0]
    num_example = X.shape[1]
    
    W = np.zeros(num_features)
    B = 0.0
    
    eta = 0.1
    eps = 1e-2
    max_epoch = 5000
    loss = 1
    loss_list = []
    
    for epoch in range(max_epoch):
        for i in range(num_example):
            x = X[:,i].reshape(num_features,1)
            y = Y[:,i].reshape(1,1)
            
            a = ForwardCalculation(W,B,x)
            dW, dB = BackPropagation(x,y,a)
            W, B = UpdateWeights(W, B, dW, dB, eta)
        
        loss = CheckLoss(W, B, X, Y)
        loss_list.append(loss)
        if loss < eps:
            break

    A = ForwardCalculation(W,B,X)
    Class = np.around(A)
    print(A)
    print(Class)

#逻辑与门
    X, Y = ReadData_and()
    num_features = X.shape[0]
    num_example = X.shape[1]
    
    W = np.zeros(num_features)
    B = 0.0
    
    eta = 0.1
    eps = 1e-2
    max_epoch = 5000
    loss = 1
    loss_list = []
    
    for epoch in range(max_epoch):
        for i in range(num_example):
            x = X[:,i].reshape(num_features,1)
            y = Y[:,i].reshape(1,1)
            
            a = ForwardCalculation(W,B,x)
            dW, dB = BackPropagation(x,y,a)
            W, B = UpdateWeights(W, B, dW, dB, eta)
        
        loss = CheckLoss(W, B, X, Y)
        loss_list.append(loss)
        if loss < eps:
            break

    A = ForwardCalculation(W,B,X)
    Class = np.around(A)
    print(A)
    print(Class)

猜你喜欢

转载自www.cnblogs.com/tk7362/p/10672152.html