【问题标题】:Python - sklearn.MLPClassifier: How to obtain output of the first hidden layerPython - sklearn.MLPClassifier:如何获取第一个隐藏层的输出
【发布时间】:2018-06-15 05:07:36
【问题描述】:

我在学习一些深度学习技术时遇到了一种不使用反向传播的方法 (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]

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

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    你误解了什么是什么。

    输入就是你传入的内容。

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

    【讨论】:

    • 所以我想我已经完成了一半。有没有办法访问为 sklearn mlp 分类器定义的激活函数? mlp.activation 只给出为参数定义的字符串。还是我必须手动定义?
    • @CodyChung 请参阅documentation。默认情况下是 ReLU。您可以指定 {‘identity’、‘logistic’、‘tanh’、‘relu’} 中的任何一个。
    • 哦,正如我所说,我知道如何访问“定义”为激活函数(它确实是 relu),但是,我想知道是否有一种方法可以实际使用该函数无需手动定义?
    • @CodyChung 你没有手动定义它,它已经在 sklearn 中定义了,你只需指定你想要使用的东西。还是我误解了你,因为我不明白你的问题的重点?如果您问是否可以通过自己的激活函数,那么我不确定(我认为您不能)。
    • 不应该是from sklearn.neural_network._base import ACTIVATIONS; ACTIVATIONS['relu'](np.matmul(data, mlp.coefs_[0]) + mlp.intercepts_[0]))吗?
    【解决方案2】:

    对于通过寻找最深隐藏层来滚动的其他人...

    def deepest_layer(data, MLP, layer=0):
        L = ACTIVATIONS['relu'](np.matmul(data, MLP.coefs_[layer]) + MLP.intercepts_[layer])
        layer += 1
        if layer >= len(MLP.coefs_)-1:
            return L
        else:
            return deepest_layer(L, MLP, layer=layer)
    
    L = deepest_layer(data, mlp)
    

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多