解决Tensorflow sess.run导致的内存溢出问题


Posted in Python onFebruary 05, 2020

下面是调用模型进行批量测试的代码(出现溢出),开始以为导致溢出的原因是数据读入方式问题引起的,用了tf , PIL和cv等方式读入图片数据,发现越来越慢,内存占用飙升,调试时发现是sess.run这里出了问题(随着for循环进行速度越来越慢)。

# Creates graph from saved GraphDef
  create_graph(pb_path)
 
  # Init tf Session
  config = tf.ConfigProto()
  config.gpu_options.allow_growth = True
  sess = tf.Session(config=config)
  init = tf.global_variables_initializer()
  sess.run(init)
 
 
  input_image_tensor = sess.graph.get_tensor_by_name("create_inputs/batch:0") 
  output_tensor_name = sess.graph.get_tensor_by_name("conv6/out_1:0") 
 
 
  for filename in os.listdir(image_dir):
    image_path = os.path.join(image_dir, filename)
 
    start = time.time()
    image_data = cv2.imread(image_path)
    image_data = cv2.resize(image_data, (w, h))
    image_data_1 = image_data - IMG_MEAN
    input_image = np.expand_dims(image_data_1, 0)
 
    raw_output_up = tf.image.resize_bilinear(output_tensor_name, size=[h, w], align_corners=True) 
    raw_output_up = tf.argmax(raw_output_up, axis=3)
    
 
    predict_img = sess.run(raw_output_up, feed_dict={input_image_tensor: input_image})    # 1,height,width
    predict_img = np.squeeze(predict_img)   # height, width 
 
    voc_palette = visual.make_palette(3)
    masked_im = visual.vis_seg(image_data, predict_img, voc_palette)
    cv2.imwrite("%s_pred.png" % (save_dir + filename.split(".")[0]), masked_im)
 
 
    print(time.time() - start)
 
  print(">>>>>>Done")

下面是解决溢出问题的代码(将部分代码放在for循环外

# Creates graph from saved GraphDef
  create_graph(pb_path)
 
  # Init tf Session
  config = tf.ConfigProto()
  config.gpu_options.allow_growth = True
  sess = tf.Session(config=config)
  init = tf.global_variables_initializer()
  sess.run(init)
 
  input_image_tensor = sess.graph.get_tensor_by_name("create_inputs/batch:0") 
  output_tensor_name = sess.graph.get_tensor_by_name("conv6/out_1:0") 
  
##############################################################################################################
  raw_output_up = tf.image.resize_bilinear(output_tensor_name, size=[h, w], align_corners=True) 
  raw_output_up = tf.argmax(raw_output_up, axis=3)
##############################################################################################################
 
  for filename in os.listdir(image_dir):
    image_path = os.path.join(image_dir, filename)
 
    start = time.time()
    image_data = cv2.imread(image_path)
    image_data = cv2.resize(image_data, (w, h))
    image_data_1 = image_data - IMG_MEAN
    input_image = np.expand_dims(image_data_1, 0)
    
    predict_img = sess.run(raw_output_up, feed_dict={input_image_tensor: input_image})    # 1,height,width
    predict_img = np.squeeze(predict_img)   # height, width 
 
    voc_palette = visual.make_palette(3)
    masked_im = visual.vis_seg(image_data, predict_img, voc_palette)
    cv2.imwrite("%s_pred.png" % (save_dir + filename.split(".")[0]), masked_im)
    print(time.time() - start)
 
  print(">>>>>>Done")

总结:

在迭代过程中, 在sess.run的for循环中不要加入tensorflow一些op操作,会增加图节点,否则随着迭代的进行,tf的图会越来越大,最终导致溢出;

建议不要使用tf.gfile.FastGFile(image_path, 'rb').read()读入数据(有可能会造成溢出),用opencv之类读取。

以上这篇解决Tensoflow sess.run导致的内存溢出问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python异常和文件处理机制详解
Jul 19 Python
Python实现基本线性数据结构
Aug 22 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
python 判断参数为Nonetype类型或空的实例
Oct 30 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
浅谈keras.callbacks设置模型保存策略
Jun 18 Python
Python 数据可视化之Matplotlib详解
Nov 02 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
Feb 05 #Python
浅谈tensorflow之内存暴涨问题
Feb 05 #Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 #Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 #Python
django3.02模板中的超链接配置实例代码
Feb 04 #Python
tensorflow自定义激活函数实例
Feb 04 #Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 #Python
You might like
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
Python实现简单的可逆加密程序实例
2015/03/05 Python
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python 探针的实现原理
2016/04/23 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
python读取文件名并改名字的实例
2019/01/07 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
Keras自定义IOU方式
2020/06/10 Python
Python 操作 MySQL数据库
2020/09/18 Python
Django多数据库联用实现方法解析
2020/11/12 Python
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
宿舍违规检讨书
2014/01/12 职场文书
投标承诺书范本
2014/03/27 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
植物园观后感
2015/06/11 职场文书