簡體   English   中英

運行 python 腳本時內存不足

[英]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)

直覺上,我認為每次循環發生時,程序都會分別刪除sigbufsf的先前值、數據和包含數據的對象。 顯然情況並非如此,因為 google colab 中的 RAM 崩潰了,因此在最后添加了del sigbufsdel f但這也不起作用。

有沒有辦法清除內存而不是讓它崩潰? 如果我手動執行,假設我一次執行 20 個數據集,RAM 不會崩潰(因為它可以處理該數量)。

注意:我要保存的最終確定的位不是那么大,它是相對較大的實際數據集。

在我的一個機器學習訓練代碼中,我也遇到了類似的問題,該代碼循環處理多個數據集。 在您面臨的情況下,Python 的垃圾收集器非常蹩腳。 我建議你使用另一個 python 文件(腳本文件)來運行你當前的 python 文件(主文件),而不是當前主文件中的循環。 您將在新腳本文件中提供循環,並合並該腳本文件中的所有內容。 這樣,您在當前主文件中執行的迭代將通過腳本文件作為單獨的運行執行,您的問題將被消除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM