美文网首页我爱编程
tensorflow运行程序逐渐变慢(内存泄漏)

tensorflow运行程序逐渐变慢(内存泄漏)

作者: 灿烂的GL | 来源:发表于2018-03-25 20:09 被阅读0次

问题:运行主程序时发现随时间增加速度越来越慢一段时间后会出现内存溢出OOM类型错误

分析问题如下:这个分析很好可参考下[https://zhuanlan.zhihu.com/p/31619020]

1、数据太大:调小batch,无用。。。思考是导入数据太大,转换导入方式,我这里输入的数据维度很大,而且是三个变量,几百张图片导出json/csv/txt就要十几个G,改尝试方式如下:

方法一:由于输入数据太大放弃批量将数据处理成上述格式;改变图片导入方式采用边导入batch个图片边处理数据的方式,这样图片处理部分和sess.run部分就会有重叠,导致在sess.run部分迭代过程不断增加op,运行速度下滑

方法二:换用tf自带的导入方式用tfrecord方式导入参考,参考之前的笔记https://www.jianshu.com/writer#/notebooks/23628696/notes/25628257
【最后就是通过换了数据处理方式解决的,同时速度也提高了,当然好的显卡很重要....】

2、tf本身每次sess迭代这块节点不断累加:通常我们的处理方式是定义好图,直接在sess部分反馈数据,然后run一下就可以了,但如果是动态图就不一样了,也就是说你在sess部分定义了其他的tf节点操作 ,随着每次操作图是动态的累加节点。当然最好解决办法是将op操作都放在sess前,不行的话这里考虑每次迭代时将旧图删除,运行新图,关于图调试基本知识,【查看具体问题出现在哪个节点上:print (tf.get_default_graph().as_graph_def()) 】参考[http://www.sohu.com/a/126825399_473283]

方法一:创建新图,sess.run()运行新图,这个在最初建立图的时候调用,就是说每次运行都是新建的图
tf.reset_default_graph()
train_graph = tf.Graph()
with trian_graph.as_default():
报错:某op出现错误,不在同一张图上,原因是我在默认图中还调用了其他的模型,也就是形成了嵌入图

方法二:在sess.run()模块重置图,在调用完成后关闭
for step in range(total_step):
tf.reset_default_graph()。。。。注:不能在嵌套图中调用
with tf.Session() as sess:
tfops = tf add Ops ...
sess.run(tfops)
tf.get_default_graph().finalize()
报错:is not an element of this graph。跟之前原因一样还是因为嵌入图,感觉没有嵌入图的话这两种解决方法逻辑上都是可行的

ps : 一个很好的训练保存测试模型笔记[http://blog.csdn.net/huachao1001/article/details/78501928]

相关文章

  • C语言最简单的攻击手段——黑客基本技能

    内存泄漏 在C语言程序设计中,内存泄漏几乎是很难避免的,C程序产生泄漏内存,则运行速度会逐渐变慢,并最终停止运行;...

  • tensorflow运行程序逐渐变慢(内存泄漏)

    问题:运行主程序时发现随时间增加速度越来越慢一段时间后会出现内存溢出OOM类型错误 分析问题如下:这个分析很好可参...

  • JavaScript垃圾回收机制

    一:内存-内存泄漏 程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。对于...

  • Java ThreadLocal可能引起的内存泄漏

    内存泄漏:内存泄漏是指程序中已动态分配的堆内存由于某种原因程序未释放或者无法释放,造成系统内存的浪费,导致程序运行...

  • Android内存泄漏与内存管理工具

    在程序运行过程中,有时会发生内存泄漏的问题,导致程序卡顿或者卡死。 内存泄漏? 简单的说,内存泄漏表示的是不再用到...

  • 浅谈前端中的内存泄漏

    一、内存泄漏的概念 不再用到的内存,没有及时释放,就叫做内存泄漏(memory leak)程序的运行需要内存,只要...

  • iOS内存泄漏问题及解决方案

    内存泄漏 内存泄漏指的是程序中已动态分配的堆内存由于某些原因未能释放或无法释放,造成系统内存的浪费,导致程序运行速...

  • 浅谈 JS 内存泄漏问题

    什么是内存泄漏? 程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。 对于...

  • 前端内存泄漏

    什么是内存泄漏? 程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。 对于...

  • JavaScript垃圾回收机制

    在介绍垃圾回收机制之前先了解一个概念:内存泄漏。 什么是内存泄漏? 程序的运行需要内存,只要程序提出要求,操作系统...

网友评论

    本文标题:tensorflow运行程序逐渐变慢(内存泄漏)

    本文链接:https://www.haomeiwen.com/subject/exhfcftx.html