python - 在 for 循环中训练顺序模型的内存不足;以前的解决方案不起作用
问题描述
我正在 for 循环中训练一系列模型 - 以测试某种架构。这样做时,我的内存不足,系统关闭了进程。
同样的问题出现在这个问题和这个问题中。为了尝试他们的解决方案,我使用与给我带来问题的循环类似的循环进行了测试运行。代码是:
def mem_test(n):
train_data = np.random.rand(1000,1500)
train_labels = np.random.randint(2,size= 1000)
mem = []
for i in range(n):
model = keras.Sequential([keras.layers.Dense(1000, activation= tf.nn.relu),
keras.layers.Dense(2,activation = tf.nn.softmax)])
model.compile(optimizer= tf.train.AdamOptimizer(.001), loss = 'sparse_categorical_crossentropy',
metrics = ['accuracy'])
model.fit(train_data,train_labels, epochs = 1)
mem.append(psutil.virtual_memory())
return mem
def mem_test_clear(n):
train_data = np.random.rand(1000,1500)
train_labels = np.random.randint(2,size= 1000)
mem = []
for i in range(n):
model = keras.Sequential([keras.layers.Dense(1000, activation= tf.nn.relu),
keras.layers.Dense(2,activation = tf.nn.softmax)])
model.compile(optimizer= tf.train.AdamOptimizer(.001), loss = 'sparse_categorical_crossentropy',
metrics = ['accuracy'])
model.fit(train_data,train_labels, epochs = 1)
mem.append(psutil.virtual_memory())
keras.backend.clear_session()
tf.reset_default_graph()
return mem
虽然后者似乎比前者做得稍好,但它们最终仍然会累积内存使用量。因此,对于我的实际应用,我没有解决方案。在这种情况下,我需要做什么才能真正释放内存?我究竟做错了什么?
解决方案
您只需编译一次模型。然后你可以建立一个循环来拟合它:
import numpy as np
import psutil
import keras
import tensorflow as tf
def mem_test(n):
train_data = np.random.rand(1000,1500)
train_labels = np.random.randint(2,size= 1000)
mem = []
model = keras.Sequential([keras.layers.Dense(1000, activation= tf.nn.relu),
keras.layers.Dense(2,activation = tf.nn.softmax)])
model.compile(optimizer= tf.train.AdamOptimizer(.001), loss = 'sparse_categorical_crossentropy',
metrics = ['accuracy'])
for i in range(n):
model.fit(train_data,train_labels, epochs = 1)
mem.append(psutil.virtual_memory())
return mem
mem_test(50)
这样它只会消耗少量的内存并且不会积累任何东西。此外,这是您的模型正确工作的方式。
推荐阅读
- javascript - Angular 8:运行“ng build --prod”时core.ts中的错误
- r - 如何通过一系列值循环操作,其中一个值为 0
- ios - updateTransaction 中不包含已兑换的促销代码
- unity3d - 即使使用新版本 v2.0.0,air tap 也无法在 hololens 1 上工作
- reactjs - Dynamic react-bootstrap carousel breaking apart. (A valid React element (or null) must be returned.)
- twitter-bootstrap - Bootstrap 4 灵活的网格
- android - 如何使用 Intent 将一组对象从一个活动传递到另一个活动?
- ios - 在 SwiftUI 中,如何访问 UIViewRepresentable 中 .foregroundColor 和其他修饰符的当前值?
- terraform - 在 Terraform 中使用带有偏移量的计数
- c# - 如何使用文件观察程序确定文本 (.txt) 文件何时完成写入磁盘