解决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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
Python实现TCP通信的示例代码
Sep 09 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
python中文分词库jieba使用方法详解
Feb 11 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
python 装饰器功能与用法案例详解
Mar 06 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 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随机生成福彩双色球号码的2种方法
2013/02/04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
shiro授权的实现原理
2017/09/21 Javascript
Three.js基础学习教程
2017/11/16 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
Linux下多个Python版本安装教程
2018/08/15 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
通信工程毕业生求职信
2013/11/16 职场文书
留学推荐信写作指南
2014/01/25 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
给上级领导的感谢信
2015/01/22 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
netty 实现tomcat的示例代码
2022/06/05 Servers