解决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基于twisted实现简单的web服务器
Sep 29 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
Python反射的用法实例分析
Feb 11 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
Python 使用with上下文实现计时功能
Mar 09 Python
Python简单定义与使用二叉树示例
May 11 Python
python 获取当天凌晨零点的时间戳方法
May 22 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
pygame实现成语填空游戏
Oct 29 Python
Python程序控制语句用法实例分析
Jan 14 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
深入浅出php socket编程
2015/05/13 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
JavaScript闭包详解
2015/02/02 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
python开发之字符串string操作方法实例详解
2015/11/12 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
行政经理的岗位职责
2013/11/23 职场文书
酒店销售主管岗位职责
2014/01/04 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
高校教师岗位职责
2014/03/18 职场文书
学习党章的体会
2014/11/07 职场文书
应聘教师自荐信
2015/03/26 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL