大家好,我們是 AI . FREE Team - 人工智慧自由團隊,這一次的鐵人賽,自由團隊將從0到1 手把手教各位讀者學會 (1)Python基礎語法 (2)Python Web 網頁開發框架 – Django (3)Python網頁爬蟲 – 周易解夢網 (4)Tensorflow AI語言模型基礎與訓練 – LSTM (5)實際部屬AI解夢模型到Web框架上。
自由團隊的成立宗旨為開發AI/新科技的學習資源,提供各領域的學習者能夠跨域學習資料科學,並透過自主學習發展協槓職涯,結合智能應用到各式領域,無論是文、法、商、管、醫領域的朋友,都可以自由的學習AI技術。
AI . FREE Team 讀者專屬福利 → Python Basics 免費學習資源
W
可以透過改變權重來學習輸入與輸出的關係W
權重之後,模型可以透過學習得知每個輸入的重要性W
要如何學習到好的一個值呢? 就必須靠接下來介紹的向後傳播(Back propagation)loss function
來求出之間的差距loss
為正,因為y_t
比y_p
還小,需要降低y_p
loss
為負,因為y_t
比y_p
還大,需要提高y_p
y_p
為預測的值y_t
為答案的值loss function
: 一個模型輸出與答案之間的差距,當今天預測與答案之間有落差時,要能夠表示出這之間的差距,所以不同的task會有不同的loss function
公式y_p
可以根據loss
提高或降低呢,必須將腦筋動到一直沒用到的W
由上述的公式可以達到,由loss的值作判斷,再決定這次的更新是增加或是減少
α
: 為學習率(learning rate),不讓Wi
一次調太多,而超出最佳的解,類似Wi
在找出最佳參數時所走的步伐大小,通常值<<<<<1t
: 表示當前在做第t筆資料e(t)
: 決定這次的Wi
是增加或降低W
和門檻θ
,範圍將落在0.5到-0.5隨機選出X
丟進數學式並求出y_p
loss
並調整每個W
W
找到最佳的參數,使正確率提高numpy
以及可以讓數據視覺化的工具matplotlib
import matplotlib.pyplot as plt
import numpy as np
X_tr = np.array([[0,0] , [0,1] , [1,0] , [1,1]])
X_te = np.array([[0,1] , [1,1] , [0,0] , [1,0]])
Y_xor = np.array([0,1,1,0])
class Perceptron:
def __init__(self):
self.w = None
self.b = None
def model(self,x):
'''
# 用內積dot來計算w和x,回傳是否大於b
'''
return np.dot(self.w ,x) >= self.b
def predict(self,X):
'''
將預測的結果放進陣列
'''
Y = []
for x in X:
result = self.model(x)
Y.append(result)
return np.array(Y)
def acc_score(self,y_p,y_t):
c = 0
for i,j in zip(y_p,y_t):
if i == j:
c += 1
return (c / len(y_t)) # or y_p
def fit(self , X,Y,epochs=10,lr=1):
# 初始化權重w -0.5 ~ 0.5 ,並宣告 X.shape[1]個 (2個)
self.w = np.random.uniform(-1,1,X.shape[1])
self.b = 2
accuracy = {}
max_accuracy = 0
# 有時候跑完整份資料集並不會讓w找到最佳參數,因此我們會多跑幾輪(epochs)
for i in range(epochs):
for x,y_t in zip(X,Y):
y_p = self.model(x)
# 如果答案為1,但預測為0,則提高 w
if y_t == 1 and y_p == 0:
print(self.w)
self.w = self.w + lr * x
print(self.w)
# 反之降低 w
elif y_t == 0 and y_p == 1:
print(self.w)
self.w = self.w - lr * x
print(self.w)
print('')
print('第{}輪: {}'.format(i ,self.w))
accuracy[i] = self.acc_score(self.predict(X),Y)
# 將正確率較高的w和b保存
if (accuracy[i] > max_accuracy):
max_accuracy = accuracy[i]
wetw = self.w
wetb = self.b
if (accuracy[i] == 1):
break
self.w = wetw
self.b = wetb
# 視覺化數據
plt.plot(np.array(list(accuracy.values())).astype(float))
plt.xlabel("Epoch")
plt.ylabel("Accuracy")
plt.ylim([0,1])
plt.show()
perceptron = Perceptron()
perceptron.fit(X_tr,Y_or,50,lr=0.05)
W
來實作,讓W
找到自己的最佳數字,有沒有覺得很酷啊!b
(threshold),更新條件與W
一樣,只是增加與減少的關係與W
相反自由團隊 官方網站:https://aifreeblog.herokuapp.com/
自由團隊 Github:https://github.com/AI-FREE-Team/
自由團隊 粉絲專頁:https://www.facebook.com/AI.Free.Team/
自由團隊 IG:https://www.instagram.com/aifreeteam/
自由團隊 Youtube:https://www.youtube.com/channel/UCjw6Kuw3kwM_il39NTBJVTg/
文章同步發布於:自由團隊部落格
(想看更多文章?學習更多AI知識?敬請鎖定自由團隊的頻道!)