0

我想用神經網絡最後的隱藏激活圖層輸出做一些測試,使用sklearn的MLPClassifierfit之後查看數據。從sklearn的MLPClassifier檢索最終隱藏的激活圖層輸出

例如,如果我創建一個分類,假設數據X_train用標籤y_train和大小(300,100)

clf = MLPClassifier(hidden_layer_sizes=(300,100)) 
clf.fit(X_train,y_train) 

的兩個隱含層我希望能夠以某種方式調用一個函數來獲取最終的隱藏激活用於附加測試的長度爲100的圖層矢量。

假設測試集X_test, y_test,正常的預測是:

preds = clf.predict(X_test) 

不過,我想這樣做:

activation_layers_for_all_X_test = clf.get_final_activation_output(X_test) 

功能如get_weights存在,但是這隻會幫助我在每層的基礎上。由於缺乏自己的轉換,是否有另一種方法來檢索最終隱藏層的最終隱藏層激活輸出?

看該圖作爲一個例子:

我想輸出是Out Layer,即從最終隱藏層激活輸出最終。

+0

您是否在尋找'predict_proba'?根據我的理解,這是最終的圖層激活。 – ncfirth

+0

@ncfirth'predict_proba'是'softmax'的輸出,而不是實際隱藏的激活層輸出。最終的隱藏層輸出被賦予一個'softmax'最終圖層輸出。基本上我想在那之前隱藏層輸出。我剛剛意識到我可能沒有解釋得很好。我會盡力解決這個問題。 –

+0

好的,它看起來沒有sklearn中的函數。看到我的回答,剛來 – ncfirth

回答

2

正如我在上面的評論中所說的那樣,它看起來並不像在sklearn中那樣有一個功能可以完全實現你想要的功能,但是你可以非常輕鬆地破解_predict函數,使其按照自己的意願進行操作。以下代碼將返回所有激活信息,您可以將其編輯爲return activations[-2],僅用於您之後的位。

def get_activations(clf, X): 
     hidden_layer_sizes = clf.hidden_layer_sizes 
     if not hasattr(hidden_layer_sizes, "__iter__"): 
      hidden_layer_sizes = [hidden_layer_sizes] 
     hidden_layer_sizes = list(hidden_layer_sizes) 
     layer_units = [X.shape[1]] + hidden_layer_sizes + \ 
      [clf.n_outputs_] 
     activations = [X] 
     for i in range(clf.n_layers_ - 1): 
      activations.append(np.empty((X.shape[0], 
             layer_units[i + 1]))) 
     clf._forward_pass(activations) 
     return activations 
+0

這似乎是製作一個隨機的np.array'np.empty' size =(X.shape [0],layer_units [i + 1])',這只是基於尺寸的激活層。總結輸入的值和激活的總和在哪裏?在對我的數據進行測試後,這似乎不像神經元。我誤解了什麼嗎? –

+0

哦,廢話。我刪除了最重要的一行。更新答案! – ncfirth

+1

我正在讀'sklearn'中的'BaseMultilayerPerceptron'代碼,這段代碼幾乎就是'_predict'函數的功能。有一個很好的笑聲,這有助於很多,謝謝@ncfirth –