马春杰杰博客
致力于深度学习经验分享!

[mcj]Keras优化for循环以及Keras节省GPU内存资源禁止Keras预分配GPU内存资源

最近在用Keras跑程序的时候,为了方便,想让它自动的进行循环测试,就用了for循环,结果跑了没几个循环就显示内存已满。

出这个错误的意思其实就是说内存已满,为了解决这个问题,可以选择减小每次for循环的数量,比如我现在是一次性循环450次,实测一次最多循环32次就报错了,所以我们可以减小循环次数,不过这种方法比较麻烦,那么有没有更加简单的呢?当然是有的~~

首先,我们要禁止预分配GPU内存,因为Keras现在是每次一运行就自动占满所有内存,我们当然不想这样,我们想要让Keras只占用实际的内存,只需要在前面加上:

这样每次只会分配所需的内存。不过我实测,只进行这一步还是会报错,因为for循环一直在增加内存,这时我们就想,可不可以让Keras每次一调用完模型就释放内存呢?答案是肯定的,我们只需要在每次调用完模型之后加上:

这样就行啦~~无论你是用多少次for循环,内存都不会增加了~

本文最后更新于2019年5月21日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

如果你对这篇文章有什么疑问或建议,欢迎下面留言提出,我看到会立刻回复!

打赏
未经允许不得转载:马春杰杰 » [mcj]Keras优化for循环以及Keras节省GPU内存资源禁止Keras预分配GPU内存资源
超级便宜的原生ChatGPT4.0

留个评论吧~ 1 评论前登陆可免验证码!

私密评论
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址(选填,便于回访^_^)
  1. #1

    我之前也遇到了这个问题,我这边测试的结果有两个地方和你的不一样:
    1、
    import tensorflow as tf
    import keras.backend.tensorflow_backend as K

    config = tf.ConfigProto()
    config.gpu_options.allow_growth=True
    sess = tf.Session(config=config)
    K.set_session(sess)
    可以去掉最后的K.set_session(sess)也有用
    2、
    import tensorflow as tf
    from keras import backend as K
    K.clear_session()
    tf.reset_default_graph()
    可以去掉tf.reset_default_graph()也管用

    我是用的keras,不是直接用tensorflow

    闫正祥 5年前 (2019-09-11) Hong Kong 谷歌浏览器 Mac OS X 10_14_6 回复

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

登录

忘记密码 ?

切换登录

注册