为什么scikit-learn mlp培训需要太多时间?

时间:2020-04-24 18:18:36

标签: python machine-learning scikit-learn neural-network mlp

我正在尝试使用scikit-learn的MLPClassifier训练MLP。

from sklearn.neural_network import MLPClassifier

我正在用5400次迭代训练mlp,但是大约需要40分钟。我做错了什么? 这是创建的mlp:

mlp= MLPClassifier(hidden_layer_sizes=(128),activation='relu',solver='adam',batch_size=500,shuffle=False,verbose=True)

这是我的代码的培训部分:

for j in range (5400):
    mlp.partial_fit(train_X, y_train,classes=np.unique(y_train))#1 step

train_X尺寸为(27000,784),即27000个样本,每个样本为28 * 28 = 784像素。

我的处理器是Intel i7-9750H,RAM大小是16GB。

1 个答案:

答案 0 :(得分:1)

您不会训练5400次迭代,但是最多可能会训练约100万次。这不是这样做的方法。

检查docs,您会看到MLPClassifier已经有一个参数max_iter,其默认值为200(这是您所用的值,因为您没有指定其他内容):

max_iter: int,默认为200

最大迭代次数。求解器迭代直到收敛(由“ tol”确定)或此迭代次数为止。对于随机解算器(“ sgd”,“ adam”),请注意,这决定了历元数(每个数据点将使用多少次),而不是梯度步数。

因此,如果您的5400次迭代中的每一次都用完200 max_iter,则实际上是在进行5400x200〜= 1,000,000次迭代(历元)。

目前尚不清楚为什么选择对for使用partial_fit循环;您可能想要使用fit进行完整的max_iter=5400且没有循环,或者保留现有的循环+ partial_fit并将MLPClassifier的定义更改为{{ 1}}。

在您所显示的内容中,我看不到采用循环方法的任何原因;如果您的数据不能容纳到内存中,并且您使用它在每次迭代中提供不同的数据片段,这是有道理的,但是这样做没有任何意义。

相关问题