Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何清除Tensorflow Keras GPU内存?_Tensorflow_Keras_Out Of Memory_Spyder - Fatal编程技术网

如何清除Tensorflow Keras GPU内存?

如何清除Tensorflow Keras GPU内存?,tensorflow,keras,out-of-memory,spyder,Tensorflow,Keras,Out Of Memory,Spyder,我在for循环中拟合模型,但我得到一个错误,我的GPU内存已满。我在Anaconda Spyder IDE中使用Keras。我的GPU是华硕GTX 1060 6gb 我也使用过类似的代码:K.clear\u session(),gc.collect(),tf.reset\u default\u graph(),del custom\u model,但它们都不起作用。 GPU属性显示,GPU 98%的内存已满: 除了numba.cuda.close()之外,没有任何东西会刷新GPU内存,但不允许

我在for循环中拟合模型,但我得到一个错误,我的GPU内存已满。我在Anaconda Spyder IDE中使用Keras。我的GPU是华硕GTX 1060 6gb

我也使用过类似的代码:
K.clear\u session()
gc.collect()
tf.reset\u default\u graph()
,del custom\u model,但它们都不起作用。 GPU属性显示,GPU 98%的内存已满:

除了
numba.cuda.close()
之外,没有任何东西会刷新GPU内存,但不允许我再次使用GPU。清除它的唯一方法是重新启动内核并重新运行代码


我正在寻找任何脚本代码来添加我的代码,允许我在for循环中使用我的代码,并在每个循环中清除GPU。

将模型创建和训练部分包装在函数中,然后使用子流程进行主要工作。培训完成后,子进程将终止,GPU内存将空闲

比如:

import multiprocessing

def create_model_and_train( ):
      .....
      .....

p = multiprocessing.Process(target=create_model_and_train) 
p.start() 
p.join()
或者,您可以创建以下函数并在每次运行之前调用它:

from keras.backend.tensorflow_backend import set_session
from keras.backend.tensorflow_backend import clear_session
from keras.backend.tensorflow_backend import get_session
import tensorflow
import gc

# Reset Keras Session
def reset_keras():
    sess = get_session()
    clear_session()
    sess.close()
    sess = get_session()

    try:
        del classifier # this is from global space - change this as you need
    except:
        pass

    print(gc.collect()) # if it does something you should see a number as output

    # use the same config as you used to create the session
    config = tensorflow.ConfigProto()
    config.gpu_options.per_process_gpu_memory_fraction = 1
    config.gpu_options.visible_device_list = "0"
    set_session(tensorflow.Session(config=config))

您应该在问题中包含重现问题的代码。您是否在循环中创建模型?为什么呢?@SimonCaby因为我在计算噪音数据的准确性,我需要平均50倍的训练和测试结果。@MatiasValdenegro我代码的一部分:image\u input=input(shape=(224224,224,3))base\u model=Xception(input\u tensor=image\u input,include\u top=False,weights='imagenet')custom\u Xception\u model.compile(loss='classifical_crossentropy',optimizer='adadelta',metrics=['accurity'])hist=base_model.fit(X,Y,epochs=2)这是对keras的简单训练。我只需要在循环中使用它,并在每个循环的最后一个循环中清除GPU内存。好的。你不应该在循环中构建模型,而只是加载和训练权重。你不应该清除模型(还有记忆)。