Почему тренировка scikit-learn mlp занимает слишком много времени? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь обучить MLP с помощью MLPClassifier scikit-learn.

from sklearn.neural_network import MLPClassifier

Я тренирую mlp с 5400 итерациями, но это занимает примерно 40 минут. Что я делаю не так? Вот созданная млп:

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. Объем оперативной памяти - 16 ГБ.

1 Ответ

1 голос
/ 24 апреля 2020

Вы не тренируете его для 5400 итераций, но возможно для ~ 1M; это не способ сделать это.

Проверяя документы , вы увидите, что MLPClassifier уже имеет параметр max_iter со значением по умолчанию 200 (которое является значением используется в вашем случае, поскольку вы не указываете ничего другого):

max_iter: int, по умолчанию = 200

Максимум количество итераций. Решатель выполняет итерации до сходимости (определяется по 'tol') или до этого числа итераций. Для стохастических c решателей ('sgd', 'adam') обратите внимание, что это определяет количество эпох (сколько раз будет использоваться каждая точка данных), а не количество шагов градиента.

Итак, если каждая из ваших 5400 итераций исчерпывает 200 max_iter, вы фактически делаете 5400x200 ~ = 1 000 000 итераций (эпох).

Не ясно, почему вы решили использовать for l oop с partial_fit; Вы можете либо набрать go для полного fit с max_iter=5400 и без l oop, либо остаться с вашим существующим l oop + partial_fit и изменить определение вашего MLPClassifier на max_iter=1.

В том, что вы показали, я не вижу никакой причины для подхода oop; было бы оправданно, если бы ваши данные не могли поместиться в память, и вы использовали их для подачи различных фрагментов данных за одну итерацию, но, как и раньше, это не имеет никакого смысла.

...