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 –

相关问题