0

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

4

1 回答 1

1

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

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

max_iter: int, 默认=200

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

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

目前尚不清楚为什么您选择使用带有;的for循环。partial_fit您可能想要使用完整fitmax_iter=5400循环和无循环,或者保留现有循环 +partial_fit并将您的定义更改MLPClassifiermax_iter=1.

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

于 2020-04-24T18:28:48.550 回答