從零開始學習AI-3:用Python對人事物貼標籤
今天,我們將繼續探索如何使用Python對人事物進行標籤化,這在AI的推理過程中是非常重要的一環。
當你上傳一張X光片時,AI會標記出「可能有肺癌」的風險;上傳一段影片到影音平台時,AI則會給它貼上「動漫」、「幽默」或「兒童」等標籤。這種專門的動作在AI術語中稱為「分類」(classification)。
在前一篇文章中,我們已經從電子試算表轉入Python的世界,並實作了AI運算的天下第一招:sum of product。今天,我們將繼續學習Python,並實作AI運算的天下第二招:非線性函數。如果你只關心AI的推理,而不涉及AI的訓練,掌握這兩招就已經足夠,非常簡單!
非線性函數
非線性函數的概念可能有些抽象,簡單來說,非線性函數就是那些不符合線性關係的函數。你可能記得線性函數的形式,例如 y=ax+b 或 f(x)=ax+b。如果函數不呈現這種形式,那麼它就是非線性函數。
Python中的基本功能
在上一集影片中提到,Python作為物件導向語言,擁有良好的藍圖共享機制。我們可以輕鬆引用別人的代碼並加入自己的創意,實現想要的功能。但工程師也是很懶惰的,Python內建了大部份程式都需要的藍圖,像是控制台,控制台中最重要的之一就是print
函數,用來顯示結果。Python內建控制台的藍圖讓我們在程式最前面可以少打 import 控制台
這幾個字,使用每個控制台的函數時也可以少打控制台.
這幾個字。
最簡單的寫法是:
print(A)
未來我們可以學習更多複雜的用法。
定義函數
在數學中,我們使用define這個字來定義函數,考量工程師的懶惰個性,在Python中,使用 def
這個關鍵字來定義函數。例如:
def f(x):
return 3*x + 1
在Python中,縮排是非常重要的,它幫助我們理解代碼的層級結構。接下來,我們來定義一個加法函數並使用print
顯示結果:
def add(a, b):
return a + b
print(add(3, 5)) # 輸出應為8
大家可以自由修改這個函數,來進行不同的運算。
條件語句
接下來我們學習條件語句。Python的條件語句寫法接近英文,只需遵循特定語法即可。例如,一句國中學的英文"I will get the credit if my score is more than 60."
寫成Python程式就變成:
score = 75
if score > 60:
print("You get the credit.")
else:
print("You don't get the credit.")
這樣的寫法讓程式邏輯更加清晰。
ReLU函數
現在,讓我們實作ReLU函數,這在深度學習中非常常見。ReLU的定義是:如果輸入大於0,則返回該輸入;否則返回0。
def relu(x):
if x > 0:
return x
else:
return 0
測試這個函數:
print(relu(3)) # 輸出應為3
print(relu(-1)) # 輸出應為0
Softmax函數
Softmax函數通常用於多類別分類問題,能將一組實數轉換為機率,確保總和為1。以下是Softmax函數的實作範例:
import numpy as np
def softmax(logits):
exp_logits = np.exp(logits - np.max(logits))
return exp_logits / np.sum(exp_logits)
logits = [2.0, 1.0, 0.1]
print(softmax(logits))
數據區分:藍綠數據
最後,我們將之前用電子試算表區分藍綠數據的過程用Python實現。詳細的假設可以參考相關影片。大家可以自由修改數據進行實驗。
import numpy as np
def softmax(logits):
exp_logits = np.exp(logits - np.max(logits))
return exp_logits / np.sum(exp_logits)
#民調向量
#馬英九,謝長廷,蔡英文,朱立倫,韓國瑜,賴清德,侯友宜,柯文哲
G=np.array([-1,1,1,-1,-1,1,-1,0]) #綠
B=np.array([1,-1,-1,1,1,-1,1,0]) #藍
t=np.array([-1,0,1,-1,-1,1,0,0]) #測試樣本
logits = [np.dot(G,t),np.dot(B,t)]
print(softmax(logits))
今天的所有程式碼都可以在共享的Colab筆記本中找到,歡迎複製到自己的Google雲端硬碟進行實驗。