繁体   English   中英

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

[英]Why scikit-learn mlp training takes too much time?

我正在尝试使用 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。

您不会训练它进行 5400 次迭代,但可能会进行多达 100 万次迭代; 这不是这样做的方法。

检查docs ,您会看到MLPClassifier已经有一个参数max_iter ,默认值为 200 (这是您的案例中使用的值,因为您没有指定任何不同的内容):

max_iter: int, 默认=200

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

因此,如果您的 5400 次迭代中的每一次都耗尽了 200 max_iter ,那么您实际上是在进行 5400x200 ~= 1,000,000 次迭代(epochs)。

不清楚为什么选择使用带有partial_fitfor循环; 您可能希望 go 完全fit max_iter=5400并且没有循环,或者保留现有循环 + partial_fit并将 MLPClassifier 的定义更改为MLPClassifier max_iter=1

在您所展示的内容中,我看不出循环方法的任何原因; 如果您的数据不适合 memory 并且您使用它在每次迭代中提供不同的数据切片,那将是合理的,但它没有任何意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM