解决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三级目录展示的实现方法
Sep 28 Python
Python中的浮点数原理与运算分析
Oct 12 Python
python使用锁访问共享变量实例解析
Feb 08 Python
django用户登录和注销的实现方法
Jul 16 Python
Python全排列操作实例分析
Jul 24 Python
Python 忽略warning的输出方法
Oct 18 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
Python如何定义有可选参数的元类
Jul 31 Python
python的launcher用法知识点总结
Aug 07 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
详解numpy1.19.4与python3.9版本冲突解决
Dec 15 Python
python3读取文件指定行的三种方法
May 24 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判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
公司市场部岗位职责
2013/12/02 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
年会主持词结束语
2014/03/27 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
市场策划求职信
2014/08/07 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
作弊检讨书范文
2015/05/06 职场文书
奔腾年代观后感
2015/06/09 职场文书
爱国电影观后感
2015/06/19 职场文书
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
SQL Server中锁的用法
2022/05/20 SQL Server