首页 > 解决方案 > Python - sklearn.MLPClassifier:如何获得第一个隐藏层的输出

问题描述

我正在学习一些深度学习技术,并遇到了一种不使用反向传播的方法(https://arxiv.org/abs/1706.02480)。该方法的基本思想是训练浅单隐藏层,丢弃输出层,在训练好的(第一个)隐藏层和新的输出层之间增加一个隐藏层。重复该过程(添加和训练),直到满足某些标准。我正在尝试使用 sklearn 中提供的 MLP 分类器来实现此方法。我面临的问题是如何获得隐藏层的输出。例如,如果我使用

mlp = MLPClassifier()
mlp.predict(data)

,它会给我整个网络的输出。但是,我需要的是网络隐藏层的子输出。为了显示:

输入--> 连接1(权重)--> 隐藏层--> 连接2(权重)--> 输出(--> 预测)

我目前需要的不是输出预测,而是来自隐藏层(隐藏层和连接 2 之间)的结果。我知道隐藏层(connection1 和隐藏层之间)的输入可以通过

np.matmul(data, mlp.coefs_[0]) + mlp.intercepts_[0]

有没有办法获得隐藏层的结果?

标签: pythonmachine-learningscikit-learn

解决方案


你误解了什么是什么。

输入就是你传入的内容。

第一个隐藏层由模型参数 W 1和 b 1组成。

隐藏层的输出是 f(W 1 T x + b 1 ),其中f是您的激活函数。

然后这是第二个隐藏层的输入,该隐藏层由模型参数 W 2和 b 2组成。就这样……

所以,准确的说

from sklearn.neural_network._base import ACTIVATIONS
ACTIVATIONS['relu'](np.matmul(data, mlp.coefs_[0]) + mlp.intercepts_[0]))

就是你要找的。


推荐阅读