用Python貼標籤

Oct 10, 2024 3 分鐘 1307 字 #AI

從零開始學習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筆記本

今天的所有程式碼都可以在共享的Colab筆記本中找到,歡迎複製到自己的Google雲端硬碟進行實驗。


`