如何在Python中找到MemoryError的源代码?

2024-04-26 20:47:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Hyperopt对神经网络进行超参数优化。在这样做时,经过一些迭代之后,我得到了一个MemoryError异常

到目前为止,我尝试在使用完所有变量后清除它们(为它们分配无列表或空列表,有更好的方法吗?)打印所有的local()、dirs()和globals()以及它们的大小,但是这些计数永远不会增加,而且大小非常小。你知道吗

结构如下所示:

def create_model(params):
    ## load data from temp files
    ## pre-process data accordingly
    ## Train NN with crossvalidation clearing Keras' session every time
    ## save stats and clean all variables (assigning None or empty lists to them)

def Optimize():
    for model in models: #I have multiple models
        ## load data
        ## save data to temp files
        trials = Trials()
        best_run = fmin(create_model,
                        space,
                        algo=tpe.suggest,
                        max_evals=100,
                        trials=trials)

在X次迭代之后(有时它完成第一个100次并转移到第二个模型),它抛出一个内存错误。 我的猜测是,一些变量仍保留在内存中,我没有清除它们,但我无法检测到它们。你知道吗

编辑:

Traceback (most recent call last):
  File "Main.py", line 32, in <module>
    optimal = Optimize(training_sets)
  File "/home/User1/Optimizer/optimization2.py", line 394, in Optimize
    trials=trials)
  File "/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py", line 307, in fmin
    return_argmin=return_argmin,
  File "/usr/local/lib/python3.5/dist-packages/hyperopt/base.py", line 635, in fmin
    return_argmin=return_argmin)
  File "/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py", line 320, in fmin
    rval.exhaust()
  File "/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py", line 199, in exhaust
    self.run(self.max_evals - n_done, block_until_done=self.async)
  File "/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py", line 173, in run
    self.serial_evaluate()
  File "/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py", line 92, in serial_evaluate
    result = self.domain.evaluate(spec, ctrl)
  File "/usr/local/lib/python3.5/dist-packages/hyperopt/base.py", line 840, in evaluate
    rval = self.fn(pyll_rval)
  File "/home/User1/Optimizer/optimization2.py", line 184, in create_model
    x_train, x_test = x[train_indices], x[val_indices]
MemoryError

Tags: inpyselfdatamodellibpackagesusr
1条回答
网友
1楼 · 发布于 2024-04-26 20:47:31

我花了几天时间才弄明白,所以我会回答我自己的问题,以节省任何人遇到这个问题的时间。你知道吗

通常,当对Keras使用Hyperopt时,create_model函数的建议return是这样的:

return {'loss': -acc, 'status': STATUS_OK, 'model': model}

但是在大型模型中,有许多求值,您不希望返回每个模型并将其保存在内存中,您所需要的只是一组给出最低loss的超参数

通过简单地从返回的dict中删除模型,解决了每次求值时内存增加的问题。你知道吗

return {'loss': -acc, 'status': STATUS_OK}

相关问题 更多 >