解决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实现dict版图遍历示例
Feb 19 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
python Celery定时任务的示例
Mar 13 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
使用python实现滑动验证码功能
Aug 05 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
PyQt5爬取12306车票信息程序的实现
May 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开发模式(简写版)
2007/03/15 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
浅析JavaScript动画
2015/06/10 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
Ionic快速安装教程
2016/06/03 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
python binascii 进制转换实例
2019/06/12 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
使用Python pip怎么升级pip
2020/08/11 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
客服专员岗位职责
2014/02/28 职场文书
就职演讲稿范文
2014/05/19 职场文书
戒赌保证书
2015/05/11 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
院系推荐意见
2015/06/05 职场文书
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers