[英]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_fit
的for
循环; 您可能希望 go 完全fit
max_iter=5400
并且没有循环,或者保留现有循环 + partial_fit
并将 MLPClassifier 的定义更改为MLPClassifier
max_iter=1
。
在您所展示的内容中,我看不出循环方法的任何原因; 如果您的数据不适合 memory 并且您使用它在每次迭代中提供不同的数据切片,那将是合理的,但它没有任何意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.