softmax啟用函式在機器學習和深度學習中十分有用,它可以將任一實數xs轉換成0到1之間的乙個概率p(xs)。在機器學習和深度學習中,softmax啟用函式可應用於回歸(softmax回歸)、神經網路多分類器的輸出層等。
softmax啟用函式計算步驟其實十分簡潔,現給定n個實數x1, x2, …, xn,softmax啟用函式計算過程如下:
1)計算exp(xs)[這裡,exp(xs)為自然常數e的xs次冪,s=1,2,…,n],將exp(xs)作為分子(numerator);
2)求和σexp(xs) ,將求和結果作為分母(denominator);
3)計算xs的概率=分子/分母(probability=numerator/denominator)。
若用數學語言表述,其實softmax啟用函式就是對n個數x1, x2, …, xn進行以下數學變換:
softmax啟用函式的輸出是在0到1之間的乙個概率(probability),且各概率p(xs)之和為1,這些概率形成乙個概率分布。
softmax算例:設有-1,0,3,5四個數,計算softmax啟用函式並用python實現之。
計算softmax
首先,計算分母:
denominator=exp(-1)+exp(0)+exp(3)+exp(5)=169.87
然後,根據前面所述softmax啟用函式計算過程或公式可算出各個分子及其概率,見表1所示。
從表1可以看出, xs數值越大,其概率就越高。注意這裡所有概率之和為1。
softmax啟用函式的計算過程也可使用圖示直觀地展示(見圖2)。
圖1 softmax啟用函式計算過程圖示
使用python實現softmax
用python numpy庫實現softmax啟用函式計算十分簡潔,本算例python程式清單如下:
import numpy as np
defsoftmax
(xs)
:return np.exp(xs)
/sum
(np.exp(xs)
)x = np.array([-
1,0,
3,5]
)print
("輸出結果:\n"
, softmax(x)
)
輸出結果:
[0.0021657, 0.00588697, 0.11824302, 0.87370431]
softmax應用例:iris(鳶尾花)資料集是常用於機器學習的一種多分類實驗資料集,它是由著名統計學家fisher於2023年收集整理。iris資料集包含150個資料集(見圖2),分為3類,每類50個樣本資料,每個樣本資料報含4個特徵/屬性。可通過萼片(sepal)長度、萼片寬度、花瓣(petal)長度、花瓣寬度4個特徵**鳶尾花屬於(setosa山鳶尾,versicolour雜色鳶尾,virginica維吉尼亞鳶尾)三種鳶尾花卉中的哪一類。 iris資料集中各樣本的四個特徵長度和寬度均以cm為單位。現設計一種mlp(multi-layer perceptron,多層感知器)神經網路實現對鳶尾花進行三分類(見圖3),該神經網路輸出層神經元採用softmax啟用函式。
圖2 iris資料集
對鳶尾花進行三分類的mlp神經網路包括乙個輸入層、兩個隱含層和乙個輸出層。輸入層為包含4個特徵的樣本[x1, x2, x3, x4],第乙個隱含層包含4個神經元,使用relu啟用函式,這是一種在多層神經網路中被證明十分有效的啟用函式;第二個隱含層包含6個神經元,同樣使用relu啟用函式。輸出層有3個神經元,採用softmax啟用函式來輸出網路**每個iris類值的概率,選擇具有最高概率的輸出便能產生清晰的iris分類結果。
圖3 鳶尾花三分類mlp神經網路架構
對應於圖3的鳶尾花三分類mlp神經網路架構,下面給出採用tensorflow後端和keras實現的鳶尾花三分類神經網路模型程式:
from sklearn import datasets
import numpy as np
from keras.models import sequential
from keras.layers import dense
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import kfold
# 匯入資料
dataset = datasets.load_iris(
)x = dataset.data
y = dataset.target
# 設定隨機種子
seed =
7np.random.seed(seed)
# 構建模型函式
defcreate_model
(optimizer=
'adam'
, init=
'glorot_uniform'):
# 構建模型
model = sequential(
) model.add(dense(units=
4, activation=
'relu'
, input_dim=
4, kernel_initializer=init)
) model.add(dense(units=
6, activation=
'relu'
, kernel_initializer=init)
) model.add(dense(units=
3, activation=
'softmax'
, kernel_initializer=init)
)# 編譯模型
model.
compile
(loss=
'categorical_crossentropy'
, optimizer=optimizer, metrics=
['accuracy'])
return model
model = kerasclassifier(build_fn=create_model, epochs=
200, batch_size=
5, verbose=0)
kfold = kfold(n_splits=
10, shuffle=
true
, random_state=seed)
results = cross_val_score(model, x, y, cv=kfold)
print
('accuracy: %.2f%% (%.2f)'
%(results.mean()*
100, results.std())
)
以上程式在tensorflow2.0.0 backend+keras2.3.1環境下執行通過,訓練結束後,模型準確率(每次執行結果可能會不同)顯示如下:
accuracy: 93.33%(0.10)
iris資料集可期待的模型準確率一般在95%以上,本應用例的mlp神經網路模型僅設計了三層神經元,就達到了不錯的90%以上準確率。
(email聯絡:[email protected])
發布日期:2023年02月07日
機器學習 softmax啟用函式
softmax函式 softmax函式,一般用於多分類的問題上,將多個神經元的輸入,對映在 0,1 之間。可以當作概率的計算。這一點跟sigmoid函式相似。softmax的計算公式為 s i ei j 1ne js i frac n e j si j 1n ejei 值得關注的是 i 1nsi 1...
python實現 softmax啟用函式
softmax函式 以上版本有問題 a np.array 1010,1000,990 np.exp a np.sum np.exp a main 1 runtimewarning overflow encountered in exp main 1 runtimewarning invalid va...
Softmax函式詳解
softmax在機器學習中有非常廣泛的應用,但是剛剛接觸機器學習的人可能對softmax的特點以及好處並不理解,其實你了解了以後就會發現,softmax計算簡單,效果顯著,非常好用。我們先來直 一下,softmax究竟是什麼意思 我們知道max,假如說我有兩個數,a和b,並且a b,如果取max,那...