![](/img/trans.png)
[英]running out of ram in google colab while importing dataset in array
[英]Running out of RAM while running python script
我在 google colab 單元中運行以下腳本:
fs = 256 #samples per second
import gc
#because of ram restriction, runs 20 datasets per time
dataset = []
length = len(detail['dataset']) #length is 123
for i in range(length):
name = detail['dataset'][i]
start = detail['seizure start'][i] * 256
end = detail['seizure end'][i] * 256
f = pyedflib.EdfReader(name)
n = f.signals_in_file
signal_labels = f.getSignalLabels()
sigbufs = np.zeros((n, f.getNSamples()[0]))
for j in np.arange(n):
sigbufs[j, :] = f.readSignal(j)
l = sigbufs.shape[-1]
t = np.linspace(0,l/fs,l)
f.close()
start = start - 100
end = end + 100
dataset.append([t[start:end], sigbufs[:,start:end]])
print("completed run " + str(i) + " out of " + str(length))
del sigbufs
del f
gc.collect()
import pickle
with open("dataset.txt",'wb') as fp:
pickle.dump(dataset, fp)
直覺上,我認為每次循環發生時,程序都會分別刪除sigbufs
和f
的先前值、數據和包含數據的對象。 顯然情況並非如此,因為 google colab 中的 RAM 崩潰了,因此在最后添加了del sigbufs
和del f
但這也不起作用。
有沒有辦法清除內存而不是讓它崩潰? 如果我手動執行,假設我一次執行 20 個數據集,RAM 不會崩潰(因為它可以處理該數量)。
注意:我要保存的最終確定的位不是那么大,它是相對較大的實際數據集。
在我的一個機器學習訓練代碼中,我也遇到了類似的問題,該代碼循環處理多個數據集。 在您面臨的情況下,Python 的垃圾收集器非常蹩腳。 我建議你使用另一個 python 文件(腳本文件)來運行你當前的 python 文件(主文件),而不是當前主文件中的循環。 您將在新腳本文件中提供循環,並合並該腳本文件中的所有內容。 這樣,您在當前主文件中執行的迭代將通過腳本文件作為單獨的運行執行,您的問題將被消除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.