我目前正在 kaggle 中开发 jupyter notebook。在我的 numpy 数组上执行所需的转换后,我对其进行了腌制,以便将其存储在磁盘上。我这样做的原因是我可以释放大数组消耗的内存。
酸洗阵列后消耗的内存约为 8.7 GB。
我决定运行此代码通过@扬GLX代码段中提供在这里,找出变量占用我的记忆:
import sys
def sizeof_fmt(num, suffix='B'):
''' by Fred Cirera, /sf/answers/76645341/, modified'''
for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:
if abs(num) < 1024.0:
return "%3.1f %s%s" % (num, unit, suffix)
num /= 1024.0
return "%.1f %s%s" % (num, 'Yi', suffix)
for name, size in sorted(((name, sys.getsizeof(value)) for name, value in locals().items()),
key= lambda x: -x[1])[:10]:
print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
Run Code Online (Sandbox Code Playgroud)
执行此步骤后,我注意到数组的大小为 3.3 gb,所有其他变量的大小加在一起约为 0.1 gb。
我决定通过执行以下操作来删除数组并查看是否可以解决问题:
del my_array
gc.collect()
Run Code Online (Sandbox Code Playgroud)
这样做之后,内存消耗从 8.7 GB 减少到 …
我有以下 for 循环:
for batch in loader:
# do something with batch
...
Run Code Online (Sandbox Code Playgroud)
从加载器中提取批处理时,我的循环有时会失败。我想做的是类似于下面的代码片段,但我希望能够继续循环下一个值,而不是跳过其余的值。
error_idxs = []
try:
for i,batch in enumerate(loader):
# do something with batch
...
except:
error_idxs.append(i)
Run Code Online (Sandbox Code Playgroud)
上述方法的问题在于,一旦发生异常,它就会退出循环,而不是继续下一个批次。
有没有办法在下一批中继续循环?
python ×3
exception ×1
ipython ×1
jupyter ×1
numpy ×1
plotly ×1
plotly-dash ×1
python-3.x ×1
try-catch ×1