[英]How to create and delete class instance in python for loop
我正在使用一個類來創建一個張量流模型。 在 for 循環中,我創建了一個實例,我必須在每次迭代結束時刪除該實例以釋放內存。 刪除不起作用,我的內存不足。 這是我嘗試過的最小示例:
import numpy as np
class tfModel(self, x):
def __init__(self, x):
....
def predict(self, x):
...
return x_new
if __name__=="__main__":
x = np.ones(100)
for i in range(0, 3):
model = tfModel(x)
x = model.predict(x)
del model
我在相關問題中讀到“del”只刪除一個引用,而不是類實例本身。 但是如何確保所有引用都被刪除並且實例可以被垃圾收集?
我認為你在談論兩件事:
x
) 或每批示例並將它們輸入模型以獲得預測。 如果您的內存無法保存所有結果,則可以在必要時將結果序列化到磁盤。更具體地說,是這樣的:
class tfModel(self):
def __init__(self):
....
def predict(self, x):
...
return x_new
def my_x_generator():
for x in range(100):
yield x
THRESHOLD = 16
if __name__=="__main__":
model = tfModel()
my_result_buffer = []
for x in my_x_generator():
x_pred = model.predict(x)
my_result_buffer.append(x_pred)
if len(my_result_buffer) > THRESHOLD:
## serialize my_result_buffer to disk
my_result_buffer = []
另請注意,在我上面的示例代碼中:
tfModel
的構造tfModel
不應依賴於x
。 ( x
從__init__
刪除)。 當然,您可以使用模型參數來初始化模型。這似乎是一個特定的張量流問題。 使用模塊 multiprocessing,可以在 for 循環中生成進程。 完成后關閉進程並釋放內存。
我在這里找到了這個解決方案: Clearing Tensorflow GPU memory after model execution
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.