我找不到设置神经网络初始权重的方法,有人能告诉我怎么样? 我正在使用python包sklearn.neural_network.MLPClassifier。
以下是供参考的代码:
from sklearn.neural_network import MLPClassifier
classifier = MLPClassifier(solver="sgd")
classifier.fit(X_train, y_train)
答案 0 :(得分:5)
docs显示正在使用的属性。
属性:
...
coefs_
:list,length n_layers - 1 列表中的第i个元素表示对应于>的权重矩阵。第i层。
intercepts_
:list,length n_layers - 1 列表中的第i个元素表示对应于层>的偏置矢量。我+ 1。
在调用clf=MLPClassifier(solver="sgd")
之前,只需构建分类器coefs_
并设置intercepts_
和clf.fit()
。
唯一剩下的问题是:sklearn会覆盖你的内容吗?
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序列化。
答案 1 :(得分:1)
multilayer_perceptron.py
根据用于隐藏图层的非线性函数初始化权重。如果您想尝试不同的初始化,可以查看函数_init_coef
here并根据需要进行修改。
答案 2 :(得分:1)
<强>解决方案强>: 一个有效的解决方案是继承MLPClassifier并覆盖_init_coef方法。在_init_coef中编写代码来设置初始权重。 然后使用新类&#34; MLPClassifierOverride&#34; ,如下例所示,而不是&#34; MLPClassifier&#34;
# 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