RandomizedSearchCV параллельно: слишком много отправленных заданий, вызывающих потерю NaN? - PullRequest
1 голос
/ 24 апреля 2020

Просто наперед: я довольно новичок в мире машинного обучения и параллельных вычислений. Я приложу все усилия, чтобы использовать правильную терминологию, но дружественные исправления были бы весьма полезны.

Я пытался настроить гиперпараметры для Keras MLP (работающего поверх TensorFlow) с помощью sklearn's RandomizedSearchCV, завернуть мою модель в KerasClassifier в соответствии с многочисленными уроками. Для этого я пытался распараллелить этот процесс через встроенную систему RandomizedSearchCV. Это работало более или менее нормально, но потом, когда я начал использовать около 6 потоков, программа все еще работала, но я начинал получать потери NaN, которые приводили к ошибкам после завершения поиска.

Теперь, Я знаю, что есть кучка обычных подозреваемых для градиентных взрывов, но здесь было кое-что интересное: эта проблема исчезла, когда я уменьшил pre_dispatch достаточно (в данном случае до n_jobs вместо 2*n_jobs).

Есть ли причина, по которой это могло бы произойти? Мои наборы данных довольно большие, но, похоже, что после начала поиска каждое задание использует только около 1-2% доступной памяти (также этот процент не изменяется при сокращении предварительно отправленных заданий?), И я ' у меня больше не возникает проблем с использованием памяти.

Во-вторых, есть ли более практичный пример, есть ли какой-нибудь простой способ заставить мой код сломаться в RandomSearchCV, как только возникнет потеря NaN? Это сэкономило бы некоторое время, а не позволило бы ему продолжаться до конца поиска - что, при полной реализации, вероятно, займет день или более - и затем выдаст ошибку. Я также думал об изменении error_score на -1 или что-то. Будет ли это на самом деле лучше? Я думаю, что, вероятно, стоит знать, что определенные комбинации гиперпараметров приводят к увеличению градиента, но не только из-за этой проблемы распараллеливания.

...