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

标签 python machine-learning scikit-learn classification data-science

我想使用 sklearn 的 MLPClassifier 对神经网络最终隐藏激活层输出进行一些测试。在 fit 之后整理数据。

例如,如果我创建一个分类器,假设数据为 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 ,即最终隐藏层的最终激活输出。

最佳答案

正如我在上面的评论中所说,在 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

关于python - 从 sklearn 的 MLPClassifier 中检索最终的隐藏激活层输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46728937/

相关文章:

machine-learning - 默认情况下,TensorFlow 是否使用机器中所有可用的 GPU?

machine-learning - 决策树性能

python - sklearn 中的 CountVectorizer 仅包含出现次数高于某个最小次数的单词

python-3.x - 使用具有对数损失和 RFECV 的不平衡数据集的问题

python - 如何选择类别概率的最佳阈值?

Python 导入模块 : how to track its orgin PYTHONPATH, sys, os

javascript - 提交模态表单后未呈现重定向页面

Python Selenium 添加多个用户的更有效方法

python - Pycharm - 导入 Matplotlib

python - 如何在 Logistic 回归中查找 Logistic/Sigmoidal 函数参数