Softmax啟用函式計算解析及MLP多分類器應用

2021-10-19 07:37:31 字數 3907 閱讀 5116

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,那...