Python RandomizedSearchCV并行:调度的作业太多导致NaN丢失?
只是提醒一下:我对机器学习和并行计算的世界都相当陌生。我会尽我所能使用正确的术语,但友好的更正将不胜感激 我一直在尝试使用sklearn的RandomizedSearchCV为Keras MLP(运行在TensorFlow之上)调整超参数,根据大量教程将我的模型包装在KerasClassifier中。我一直在尝试通过RandomizedSearchCV的内置系统来并行这个过程。这或多或少是正常的,但当我开始使用大约6个线程时,程序仍然会运行,但我会开始丢失,这会导致搜索结束后出现错误 现在,我知道有很多关于梯度爆炸的常见疑点,但这里有一些有趣的事情:当我充分减少Python RandomizedSearchCV并行:调度的作业太多导致NaN丢失?,python,keras,scikit-learn,parallel-processing,hyperparameters,Python,Keras,Scikit Learn,Parallel Processing,Hyperparameters,只是提醒一下:我对机器学习和并行计算的世界都相当陌生。我会尽我所能使用正确的术语,但友好的更正将不胜感激 我一直在尝试使用sklearn的RandomizedSearchCV为Keras MLP(运行在TensorFlow之上)调整超参数,根据大量教程将我的模型包装在KerasClassifier中。我一直在尝试通过RandomizedSearchCV的内置系统来并行这个过程。这或多或少是正常的,但当我开始使用大约6个线程时,程序仍然会运行,但我会开始丢失,这会导致搜索结束后出现错误 现在,我知
预调度
时,这个问题就消失了(在这种情况下,减少到n个作业
,而不是2*n个作业
)
这有什么原因吗?我的数据集相当大,但似乎一旦搜索开始,每个作业只使用大约1-2%的可用内存(而且,当我剪切预调度的作业时,这一百分比不会改变),并且我没有遇到任何其他内存使用问题
第二,从更实际的角度来看,有没有什么简单的方法可以让我的代码在NaN丢失时立即进入RandomSearchCV?这将节省一些时间,而不是让它一直运行到搜索结束——如果完全实现,可能需要一天或更长时间——然后抛出错误。我也在考虑将
error\u score
改为-1或其他什么。这样会更好吗?我认为可能值得知道的是,超参数的某些组合会导致梯度爆炸,但如果这仅仅是因为这个并行化问题,那就不是了。试着把error\u score='raise'
放在RandomSearchCV
里面……它有一个抑制错误并返回NaN的坏习惯,而不是试着把error\u score='raise'
放在RandomSearchCV
里面……它有一个抑制错误并返回NaN的坏习惯相反,NaN