Neural-Networks
如何在 scikit-learn 的多層感知器中應用 Softmax 作為激活函數?[關閉]
我需要將 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 之前獲得網絡輸出的任何方法……也許是因為這個類僅用於分類(而不是回歸或其他花哨的設置)。