sklearn中MLPClassifier源码解析


神经网络

.fit()

首先传入类私用方法._fit()

  1. 确定hidden_layer_size是可迭代的
  2. 调用_validate_hyperparameters验证超参数是否合法
  3. 验证输入的x和y是否合法并且获取one-hot-label
  4. 从x、y中获取输入参数的信息,并且添加输入层和输出层
    (隐藏层作为参数,输入层和输出层可以从x、y中获取)
  5. 将随机种子(seed)变成np.random.RandomState实例
  6. 看一看是不是第一次训练该模型,如果是则进入_initialize方法
    1. 初始化weight和bias
    2. 初始化loss和score
# factor作为边界计算的分子
# 6.0说明是分类任务
factor = 6.0
if self.activation == "logistic":
    factor = 2.0

# fan_in、fan_out分别是这一层的输入大小和输出大小
init_bound = np.sqrt(factor / (fan_in + fan_out))

# _random_state就是第五点中根据seed实例出的对象
# uniform代表在随机生成,参数分别为下限,上限,size
# Generate weights and bias
coef_init = self._random_state.uniform(
    -init_bound, init_bound, (fan_in, fan_out)
)
intercept_init = self._random_state.uniform(-init_bound, init_bound, fan_out)
  1. 初始化权重和偏值的梯度(用numpy.empty)
  2. 训练(根据solver决定模型 _fit_stochastic 和 _fit_lbfgs)# 下次再读,到饭点了
  3. 验证权重是否合法,用np.isfinite(),检查是否出现INF,-INF和NAN

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289046.html

(0)
上一篇 2022年9月12日
下一篇 2022年9月12日

相关推荐

发表回复

登录后才能评论