Python NumPy 中的 Softmax
Muhammad Waiz Khan
2023年1月30日
2021年2月7日
本教程將解釋如何使用 Python 中的 NumPy 庫實現 softmax 函式。softmax 函式是對數函式的一種廣義多維形式,它被用於多項式對數迴歸和人工神經網路中的啟用函式。它被用於多項式邏輯迴歸和人工神經網路中的啟用函式。
softmax 函式將陣列中的所有元素在區間 (0,1)
內進行歸一化處理,使其可以作為概率處理。softmax 函式由以下公式定義。
我們將看一下在 Python 中使用 NumPy 庫對一維和二維陣列實現 softmax 函式的方法。
在 Python 中實現一維陣列的 NumPy Softmax 函式
假設我們需要定義一個 softmax 函式,將一個 1D 陣列作為輸入,並返回所需的歸一化陣列。
在應用 softmax 的時候,常見的問題是數值穩定性問題,也就是說,由於可能出現的指數和溢位誤差,∑j e^(z_j)
可能會變得非常大。這個溢位誤差可以通過用陣列的每個值減去其最大值來解決。
下面的程式碼示例演示了 softmax 函式的原始實現和使用 Python 中的 NumPy 庫進行最大減法的實現。
- 原始 softmax:
import numpy as np
def softmax(x):
f_x = np.exp(x) / np.sum(np.exp(x))
return f_x
- 數值穩定的 softmax:
import numpy as np
def softmax(x):
y = np.exp(x - np.max(x))
f_x = y / np.sum(np.exp(x))
return f_x
在 Python 中對二維陣列的 NumPy softmax 函式
二維陣列的 softmax 函式會沿行進行 softmax 變換,也就是沿行計算最大和。在 1D 陣列的情況下,我們不必擔心這些事情,我們只需要在完整的陣列上應用所有的操作。
下面的程式碼示例演示瞭如何使用 Python 中的 NumPy 庫對一個 2D 陣列輸入進行 softmax 變換。
import numpy as np
def softmax(x):
max = np.max(x,axis=1,keepdims=True) #returns max of each row and keeps same dims
e_x = np.exp(x - max) #subtracts each row with its max value
sum = np.sum(e_x,axis=1,keepdims=True) #returns sum of each row and keeps same dims
f_x = e_x / sum
return f_x
假設我們需要沿著二維陣列的列進行 softmax 變換,我們只需將輸入和輸出的 softmax()
方法進行傳輸即可。
示例程式碼:
softmax(x.T).T