Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中找到MemoryError的源?_Python_Hyperopt - Fatal编程技术网

如何在Python中找到MemoryError的源?

如何在Python中找到MemoryError的源?,python,hyperopt,Python,Hyperopt,我正在用Hyperopt对神经网络进行超参数优化。这样做时,经过一些迭代之后,我得到了一个MemoryError异常 到目前为止,我尝试在使用完所有变量后清除它们(为它们分配无或空列表,有更好的方法吗?),并打印所有的local()、dirs()和globals(),以及它们的大小,但这些计数从未增加,而且大小非常小 结构如下所示: return {'loss': -acc, 'status': STATUS_OK, 'model': model} def创建_模型(参数): ##从临时文件加

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

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

结构如下所示:

return {'loss': -acc, 'status': STATUS_OK, 'model': model}
def创建_模型(参数):
##从临时文件加载数据
##相应地预处理数据
##每次使用交叉验证清除Keras会话训练NN
##保存统计数据并清除所有变量(为其分配无或空列表)
def Optimize():
对于模型中的模型:#我有多个模型
##加载数据
##将数据保存到临时文件
审判
最佳运行=fmin(创建模型,
空间
algo=tpe.suggest,
最大值=100,
审判=审判)
在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
回溯(最近一次呼叫最后一次):
文件“Main.py”,第32行,在
优化=优化(训练集)
文件“/home/User1/Optimizer/optimization2.py”,第394行,在优化中
审判=审判)
文件“/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py”,第307行,在fmin中
return\u argmin=return\u argmin,
fmin中的文件“/usr/local/lib/python3.5/dist packages/hyperopt/base.py”,第635行
return\u argmin=return\u argmin)
文件“/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py”,第320行,在fmin中
右排气
文件“/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py”,第199行,在排气管中
self.run(self.max\u evals-n\u done,block\u直到\u done=self.async)
文件“/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py”,第173行,运行中
self.serial_evaluate()
文件“/usr/local/lib/python3.5/dist-packages/hyperopt/fmin.py”,第92行,以串行形式
结果=self.domain.evaluate(spec,ctrl)
文件“/usr/local/lib/python3.5/dist-packages/hyperopt/base.py”,第840行,在evaluate中
rval=self.fn(pyll\u rval)
文件“/home/User1/Optimizer/optimization2.py”,第184行,在create\u模型中
x_列,x_测试=x[列指数],x[值指数]
记忆者

我花了几天的时间才弄明白这一点,所以我将回答自己的问题,以节省遇到此问题的人的时间

通常,在对Keras使用Hyperopt时,建议的
create_model
函数的
return
如下所示:

return {'loss': -acc, 'status': STATUS_OK, 'model': model}
但是在大型模型中,有许多评估,您不想返回每个模型并将其保存在内存中,您所需要的只是一组超参数,这些超参数提供了最低的
损失

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

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

你能把这个错误和完整的堆栈跟踪一起添加到你的问题中吗?让我重新运行它,我会提取出来。@AlexJadczak,这很有用。我使用了
memory\u profiler
,90%的内存是在调用
fmin