如何在 MLPClassifier 中设置初始权重?

Posted

技术标签:

【中文标题】如何在 MLPClassifier 中设置初始权重?【英文标题】:How to set initial weights in MLPClassifier? 【发布时间】:2017-11-12 16:08:06 【问题描述】:

我找不到设置神经网络初始权重的方法,有人能告诉我怎么做吗? 我正在使用 python 包 sklearn.neural_network.MLPClassifier。

下面是代码供参考:

from sklearn.neural_network import MLPClassifier
classifier = MLPClassifier(solver="sgd")
classifier.fit(X_train, y_train)

【问题讨论】:

【参考方案1】:

docs 显示正在使用的属性。

属性: ...

coefs_ : 列表,长度 n_layers - 1 列表中第i个元素表示>层i对应的权重矩阵。

intercepts_ : 列表,长度 n_layers - 1 列表中的第 i 个元素表示对应于 layer > i + 1 的偏置向量。

只需构建您的分类器clf=MLPClassifier(solver="sgd") 并在调用clf.fit() 之前设置coefs_intercepts_

剩下的唯一问题是:sklearn 会覆盖你的 inits 吗?

code 看起来像:

    if not hasattr(self, 'coefs_') or (not self.warm_start and not
                                       incremental):
        # First time training the model
        self._initialize(y, layer_units)

在我看来,它不会取代您给定的 coefs_(您也可以检查偏差)。

打包和解包functions 进一步表明这应该是可能的。这些可能用于内部通过pickle进行序列化。

【讨论】:

这个不行,我已经试过了。在调用 fit 函数之前它不会覆盖。我找到了一个可行的解决方案,我会在评论中发布。 @MohamedElSheikh 你能发布你的解决方案吗? 嘿@Jeremy,是的,我在下面发布了一个可行的解决方案。【参考方案2】:

解决方案: 一个可行的解决方案是从 MLPClassifier 继承并覆盖 _init_coef 方法。在 _init_coef 中编写代码来设置初始权重。 然后使用新类 "MLPClassifierOverride" 如下例所示,而不是 "MLPClassifier"

# new class
class MLPClassifierOverride(MLPClassifier):
# Overriding _init_coef method
def _init_coef(self, fan_in, fan_out):
    if self.activation == 'logistic':
        init_bound = np.sqrt(2. / (fan_in + fan_out))
    elif self.activation in ('identity', 'tanh', 'relu'):
        init_bound = np.sqrt(6. / (fan_in + fan_out))
    else:
        raise ValueError("Unknown activation function %s" %
                         self.activation)
    coef_init = ### place your initial values for coef_init here

    intercept_init = ### place your initial values for intercept_init here

    return coef_init, intercept_init

【讨论】:

【参考方案3】:

multilayer_perceptron.py 根据用于隐藏层的非线性函数初始化权重。如果你想尝试不同的初始化,你可以看一下函数_init_coefhere并根据需要进行修改。

【讨论】:

以上是关于如何在 MLPClassifier 中设置初始权重?的主要内容,如果未能解决你的问题,请参考以下文章

如何在sklearn逻辑回归中设置样本权重?

如何在 DecisionTreeClassifier 中设置类权重以进行多类设置

在 sklearn.neural_network 中初始化权重

php 在woocommerce订单中设置最大权重

在 scikit-learn 的逻辑回归中设置类权重的数学原理是啥?

如何在打字稿中设置初始 React 状态?