一、绪论
项目 |
内容 |
这个作业属于哪个课程 |
[人工智能](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)