Python - sklearn.MLPClassifier:如何获取第一个隐藏层的输出

问题描述 投票:1回答:1

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

mlp = MLPClassifier()
mlp.predict(data)

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

输入 - > connection1(权重) - >隐藏层 - > connection2(权重) - >输出( - >预测)

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

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

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

python machine-learning scikit-learn
1个回答
2
投票

你误解了什么是什么。

输入是您传入的内容。

第一隐藏层由模型参数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]))

是你在找什么。

© www.soinside.com 2019 - 2024. All rights reserved.