解决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模拟登陆类
Mar 29 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
Python lambda表达式用法实例分析
Dec 25 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
判断Threading.start新线程是否执行完毕的实例
May 02 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中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
js function使用心得
2010/05/10 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Python中Selenium库使用教程详解
2020/07/23 Python
python爬虫用mongodb的理由
2020/07/28 Python
浅谈python 类方法/静态方法
2020/09/18 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
上海期货面试题
2014/01/31 面试题
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
《小动物过冬》教学反思
2014/04/17 职场文书
体育教师个人总结
2015/02/09 职场文书
离婚被告代理词
2015/05/23 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
Python基础详解之邮件处理
2021/04/28 Python