当我们使用tensorflow进行深度学习时,进行训练模型时,我们往往要读取大量的图片进行批处理输入模型进行训练.
如果我们一次性读取全部图片或者过多张图片,内存将有可能溢出.
如果我们一次读取小批量图片,再将图片转换成tensor,然后再输入模型,则随着模型的迭代次数增大,内存占用将越来越大,最终内存溢出.如下代码:
sess=tf.Session()
ImgFiles= ***** (包括所有训练集图片的文件名)
for imgFile in imgFiles:
img=scipy.misc.imread(imgFile) #读取图片
img=tf.convert_to_tensor(img,dtype='float32') #将图片转化成tensor
img=preprocessing(img) #图片预处理
res=net(img) #将图片输入网络模型进行训练,得出结果
如上代码,因为tensor结点是不会自动回收的,即使你变量名被覆盖,原来的tensor结点依然占用内存,最终内存占用将越来越大,所以不要在循环里面生成tensor.
可通过如下方法检测是否不断生成计算节点
在sess里面,循环外面,使用graph.finalize()锁定graph.如果运行时保存,则说明有计算节点加入.
所以,我们要使用tf.train.batch进行图片读取训练训练.
代码如下:
def read(Path):
filenames = [join(Path, f) for f in listdir(Path) if isfile(join(Path, f))] #Path为图片训练集的文件夹路径,返回的是所有训练集图片的路径的集合
filename_queue = tf.train.string_input_producer(filenames, shuffle=True, num_epochs=10) #将图片产生一个队列,可控制是否排序,图片的迭代次数
reader = tf.WholeFileReader() #产生一个读取器reader
_, img_bytes = reader.read(filename_queue) #将队列输入读取器reader当中,读取序列
image = tf.image.decode_png(img_bytes, channels=3) #对序列解码,现在image还是一张图片,为tensor
image=preprocessing(image) #对图片进行预处理
image=tf.train.batch([image], 2, dynamic_pad=True) #将图片合并生成一个批次,第二个参数2是控制这个批次包含多少张图片.
with tf.Graph().as_default() as g:
with tf.Session() as sess: #协调器要求在with tf.Session() as sess 里面使用.
img=read(Path)
coord = tf.train.Coordinator() #创建一个协调器,管理线程
threads = tf.train.start_queue_runners(coord=coord)
try:
while not coord.should_stop():
#进行模型训练
finally:
coord.request_stop()
coord.join(threads)

tensorflow 图片批处理--- tf.train.batch相关推荐

  1. tensorflow tf.train.batch()

    tf.train.batch([example, label],batch_size=batch_size, capacity=capacity) [example, label]表示样本和样本标签, ...

  2. TensorFlow 中的 tf.train.exponential_decay() 指数衰减法

    exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None) 使 ...

  3. TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制

    TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和tf.data.Dataset机制 之前写了一篇博客,关于<Tensorflow生成自己的 ...

  4. tensorflow中协调器 tf.train.Coordinator 和入队线程启动器 tf.train.start_queue_runners

    TensorFlow的Session对象是支持多线程的,可以在同一个会话(Session)中创建多个线程,并行执行.在Session中的所有线程都必须能被同步终止,异常必须能被正确捕获并报告,会话终止 ...

  5. 【Tensorflow教程笔记】常用模块 tf.train.Checkpoint :变量的保存与恢复

    基础 TensorFlow 基础 TensorFlow 模型建立与训练 基础示例:多层感知机(MLP) 卷积神经网络(CNN) 循环神经网络(RNN) 深度强化学习(DRL) Keras Pipeli ...

  6. tf.train.slice_input_producer(转)

    tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数 2018年04月01日 12:05:13 阅读数:1156 tensorfl ...

  7. tf.train.Coordinator

    tensorflow中协调器 tf.train.Coordinator 和入队线程启动器 tf.train.start_queue_runners ensorFlow的Session对象是支持多线程的 ...

  8. tf.train.Coordinator和tf.train.start_queue_runners

    TensorFlow提供了两个类来实现对Session中多线程的管理:tf.Coordinator和 tf.QueueRunner,这两个类往往一起使用. Coordinator类用来管理在Sessi ...

  9. tensorflow || 滑动平均的理解--tf.train.ExponentialMovingAverage

    1 滑动平均的理解 滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以用来估计变 ...

最新文章

  1. MLIR中间表示和编译器框架
  2. * core-js/modules/es6.array.fill in ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref
  3. js中的toString方法
  4. Http Hijacker
  5. Dubbo 版 Swagger 来啦!
  6. 解决adb调试显示 Connected Device ************** [null]
  7. 最新版的SSM框架spring5.0搭建教程(附源码)
  8. xml 属性value换行显示_跟光磊学Java开发-Java解析XML
  9. Linux中断处理:上半部和下半部
  10. 从1876年第一个电话至今:盘点英国通信变迁史
  11. 【Computer Organization笔记07】实验课:可编程逻辑器件介绍,硬件编程方法与原则,硬件编程流程
  12. yii2得到的数据对象转化成数组
  13. eclipse ARM/AARCH64版本下载
  14. Atitit  深入理解命名空间namespace  java c# php js
  15. 2套后台模板HTML+整套Easyui皮肤组件-后台管理系统模板
  16. 北邮矩阵论- 第1章 1.3两个特殊的线性空间
  17. 高考加油别学计算机图片,高考加油励志说说带图片,2020高考加油说说配图
  18. 谈下最近做的一个手机app,学习到的东西挺多的哦
  19. c语言平时作业完成的评价,C语言作业评价标准 - osc_fmg49rzg的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. 1 dB压缩点_噪声系数_小信号非线性的数学描述

热门文章

  1. Photoshop色彩混合
  2. 云计算安全漏洞及其对策(一)
  3. 我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』
  4. tp5导入excel表格
  5. 谈钱不尴尬?程序员面试谈薪资的6个技巧。
  6. 2021年电工(初级)考试题及电工(初级)考试题库
  7. C++ JsonCpp库 源码编译及使用(VS2019)
  8. java电商项目描述面试,看完跪了
  9. 基于微信小程序商店管理系统源码成品(微信小程序毕业设计)
  10. Kinect2.0UnitySDK在unity中使用-手势识别