0

fitの後にsklearnのMLPClassifierを使用して、ニューラルネットワークの最終非表示アクティベーションレイヤ出力でいくつかのテストを行いたいとします。 Iラベルy_trainおよびサイズ(300,100)SklearnのMLPClassifierからの最後の非表示アクティベーションレイヤの出力を取得します。

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

二隠れ層とX_trainデータを仮定して、分類器を作成する場合、例えば

、私は、最終的な隠されたアクティベーションを取得するために、何らかの形で機能を呼び出すことができるようにしたいと思い追加テストに使用する長さが100の2層ベクトルです。テストを想定し

X_test, y_testを設定し、通常の予測は次のようになります。

preds = clf.predict(X_test) 

しかし、私のような何かをしたいと思います。そのようget_weightsなど

activation_layers_for_all_X_test = clf.get_final_activation_output(X_test) 

機能を存在するが、それは唯一役立つだろう私はレイヤごとに変換を自分で行うのではなく、最終的な隠れ層のこれらの最終的な隠れ層活性化出力を取得する別の方法がありますか?一例としてこの図を見ると

:私はたい

出力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

これは、size =(X.shape [0]、layer_units [i + 1]) 'のランダムnp.array' np.empty'を作成しているようです。の活性層を含む。値の合計と合計入力のアクティブ化はどこですか?これは、データのテスト後にニューロンのように動作しているようには見えません。私は何かを誤解していますか? –

+0

ああ。私は最も重要な行を削除しました。答えを更新する! – ncfirth

+1

私はsklearn' 'で' BaseMultilayerPerceptron'コードを読んでいたし、このコードは、ほぼ正確に '_predict'機能が何をするかです。良い笑いを持っていた、これは助けてくれた、ありがとう@ncfirth –

関連する問題