我正在研究一些深度学习技术,并发现了一种不使用反向传播的方法( 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]
有没有办法获取隐藏层的结果?
最佳答案
你误解了什么是什么。
输入是您传入的内容。
第一个隐藏层由模型参数 W1 和 b1 组成。
隐藏层的输出为 f(W1Tx + b1) 其中 f
是你的激活函数。
这是第二个隐藏层的输入,由模型参数 W2 和 b2 组成。就这样......
所以,准确地说
from sklearn.neural_network._base import ACTIVATIONS
ACTIVATIONS['relu'](np.matmul(data, mlp.coefs_[0]) + mlp.intercepts_[0]))
这就是您要找的。p>
关于Python-sklearn.MLPClassifier : How to obtain output of the first hidden layer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50869405/