項目 | 內容 |
---|---|
這個做業屬於哪一個課程 | 人工智能實戰 2019(北京航空航天大學) |
這個做業的要求在哪裏 | 人工智能實戰第五次做業(我的) |
我在這個課程的目標是 | 瞭解人工智能的基礎理論知識,鍛鍊實踐能力 |
這個做業在哪一個具體方面幫助我實現目標 | 學習運用線性二分類,並經過代碼實踐來練習完成邏輯與門和邏輯或門 |
做業正文 | 見下文 |
其餘參考文獻 | 無 |
將其做爲一個線性二分類問題來解決,並運用課件中關於線性二分類的內容。python
import numpy as np import matplotlib.pyplot as plt from pathlib import Path import math def ReadAndData(GATE):#創建邏輯與門和邏輯或門的訓練數據 X = np.array([0,0,1,1,0,1,0,1]).reshape(2,4) AND = np.array([0,0,0,1]).reshape(1,4) OR = np.array([0,1,1,1]).reshape(1,4) if GATE=='AND': return X,AND if GATE=='OR': return X,OR 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,w,b,eta,sample):#反向傳播 dloss_z = A - Y db = np.sum(dloss_z) / sample dw = np.dot(dloss_z, X.T) / sample w = w - eta * dw b = b - eta * db return w,b def CheckLoss(w, b, X, Y, sample):#計算損失函數值 A = ForwardCalculation(w, b, X) p1 = Y * np.log(A) p2 = (1-Y) * np.log(1-A) LOSS = -(p1 + p2) loss = np.sum(LOSS) / sample return loss def InitialParameters():#初始化W和B W = np.zeros((1,2)) B = 0.0 return W,B def ShowResult(W,B,X,Y,GATE):#做圖 w = -W[0,0]/W[0,1] b = -B/W[0,1] x = np.array([0,1]) y = w * x + b plt.plot(x,y,label='w1 = '+str(round(W[0,0],3))+', w2 = '+str(round(W[0,1],3)) +', b = '+str(round(B,3))) for i in range(4): if Y[0,i] == 0: plt.scatter(X[0,i],X[1,i],marker="o",c='b',s=64) else: plt.scatter(X[0,i],X[1,i],marker="^",c='r',s=64) plt.axis([-0.1,1.1,-0.1,1.1]) plt.title(GATE) plt.xlabel("X1") plt.ylabel("X2") plt.legend(loc='upper right') plt.show() if __name__ == '__main__': W,B = InitialParameters() eta = 0.2 MAX = 10000 #最大迭代次數 eps = 1e-2 loss = 0 GATE = 'OR' X, Y = ReadAndData(GATE) for i in range(MAX): Z = ForwardCalculation(W, B, X) W, B = BackPropagation(X, Y, Z ,W , B ,eta ,4) loss = CheckLoss(W,B,X,Y,4) if loss < eps: break; ShowResult(W,B,X,Y,GATE)
邏輯與門
函數
邏輯或門
學習