从sklearn的MLPClassifier检索最终隐藏的激活层输出

Nat*_*Coy 2 python classification machine-learning scikit-learn data-science

我想这样做使用sklearn与神经网络最终隐藏激活层输出一些测试MLPClassifierfit廷的数据。

例如,如果我创建一个分类器,则假设数据X_train带有标签y_train和两个隐藏的大小层(300,100)

clf = MLPClassifier(hidden_layer_sizes=(300,100))
clf.fit(X_train,y_train)
Run Code Online (Sandbox Code Playgroud)

我希望能够以某种方式调用一个函数来检索最终隐藏的激活层矢量的长度,100以用于其他测试。

假设测试集X_test, y_test,正常预测将是:

preds = clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

但是,我想做些类似的事情:

activation_layers_for_all_X_test = clf.get_final_activation_output(X_test)
Run Code Online (Sandbox Code Playgroud)

诸如此类的功能已经get_weights存在,但这只会对我有所帮助。除了自己进行转换之外,还有另一种方法可以检索最终隐藏层激活的最终隐藏层输出吗?

以该图为例:

我想要的输出是Out Layer,即最终隐藏层的最终激活输出。

pim*_*314 5

就像我在上面的评论中说的那样,似乎没有一个功能可以完全满足您的需求,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
Run Code Online (Sandbox Code Playgroud)