解决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的id()函数解密过程
Dec 25 Python
打开电脑上的QQ的python代码
Feb 10 Python
Python的Django框架中的表单处理示例
Jul 17 Python
Python微信公众号开发平台
Jan 25 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
python中的逆序遍历实例
Dec 25 Python
Python处理mysql特殊字符的问题
Mar 02 Python
使用python3 实现插入数据到mysql
Mar 02 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
Python-openCV开运算实例
Jul 05 Python
Python面向对象编程之类的概念
Nov 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 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
Script的加载方法小结
2011/01/12 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
JS中数组重排序方法
2016/11/11 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
python3.3实现乘法表示例
2014/02/07 Python
机器学习python实战之决策树
2017/11/01 Python
基于python实现学生管理系统
2018/10/17 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
简单了解python变量的作用域
2019/07/30 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
中秋手机店促销方案
2014/06/16 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
优秀班集体申报材料
2014/12/25 职场文书