Neural-Networks

如何在 scikit-learn 的多層感知器中應用 Softmax 作為激活函數?[關閉]

  • November 1, 2016

我需要將 Softmax 激活函數應用於 scikit 中的多層 Perceptron。關於神經網絡模型(監督)主題的 scikit文檔說“ MLPClassifier通過應用 Softmax 作為輸出函數來支持多類分類。” 問題是如何應用該功能?

在下面的代碼片段中,當我在它不接受的激活參數下添加 Softmax 時。

MLPClassifier(activation='Softmax', alpha=1e-05, batch_size='auto',
      beta_1=0.9, beta_2=0.999, early_stopping=False,
      epsilon=1e-08, hidden_layer_sizes=(15,), learning_rate='constant',
      learning_rate_init=0.001, max_iter=200, momentum=0.9,
      nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
      solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False,
      warm_start=False)

錯誤代碼是:

ValueError:不支持激活“Softmax”。支持的激活是(‘identity’、‘logistic’、‘tanh’、‘relu’)。

有沒有辦法在 scikit-learn 中應用 Softmax 激活函數進行多類分類?

我想當您通過調用方法請求概率預測時應用 Softmax 函數mlp.predict_proba(X)

為了支持我的假設,我開發了這個小實驗:

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
import numpy as np

X,Y = load_iris().data, load_iris().target

mlp = MLPClassifier()
mlp.fit(X, Y)

print mlp.predict([3.1,  2.5,  8.4,  2.2])
print mlp.predict_proba([3.1,  2.5,  8.4,  2.2])
print "sum: %f"%np.sum(mlp.predict_proba([3.1,  2.5,  8.4,  2.2]))

請注意,無論插入什麼值predict_proba(),輸出概率向量總和為 1。這只能通過 Softmax 激活函數來實現(使用 Softmax 以外的激活函數並不能保證最終激活函數的總和layer 將是一個,特別是對於一個看不見的樣本)。

如果我的猜測是正確的,查看文檔我找不到在 Softmax 之前獲得網絡輸出的任何方法……也許是因為這個類僅用於分類(而不是回歸或其他花哨的設置)。

引用自:https://stats.stackexchange.com/questions/243588

comments powered by Disqus