在以keras(2.2.4)和tensorflow(1.13.1)作为后端的Google Colab笔记本上,我正在尝试调整CNN,我使用了一个简单且基本的超参数表,并在其中运行测试一组循环。 我的问题是,每次迭代后我都无法释放GPU内存,Keras似乎无法自动释放GPU内存。因此,每当出现资源耗尽:内存不足(OOM)错误时, 我进行了一些挖掘,并尝试使用该功能,重新组合了为解决该问题而提出的不同解决方案(尽管对我不起作用)
for _ in hyper_parameters :
Run_model(_)
reset_keras()
我的一组超级参数是:
IMG_SIZE = 800,1000,3
BATCH_SIZEs = [4,8,16]
EPOCHSs = [5,10,50]
LRs = [0.008,0.01]
MOMENTUMs = [0.04,0.09]
DECAYs = [0.1]
VAL_SPLITs = [0.1]
以及我用来释放GPU内存的功能:
def reset_keras():
sess = get_session()
clear_session()
sess.close()
sess = get_session()
try:
del model # this is from global space - change this as you need
except:
pass
print(gc.collect()) # if it's done something you should see a number being outputted
# use the same config as you used to create the session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 1
config.gpu_options.visible_device_list = "0"
set_session(tf.Session(config=config))
我唯一不完全了解的是“与创建模型时使用的配置相同”(第14行),因为在Keras中,我们没有明确选择特定的配置。 我经历了一次迭代,有时是两次,但是我不能超越。我已经尝试过更改batch_size,目前我无法负担性能更高的计算机。 我正在使用从 keras.utils.Sequence 继承的自定义图像生成器。 我使用这段代码监视GPU内存的状态:
import psutil
import GPUtil as GPU
def printmm():
GPUs = GPU.getGPUs()
gpu = GPUs[0]
process = psutil.Process(os.getpid())
return(" Util {0:.2f}% ".format(gpu.memoryUtil*100))
print(printmm())