当我们使用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. 【树】Kth Smallest Element in a BST(递归)
  2. 5种云计算安全基础知识和最佳实践
  3. python中正则表达式是什么意思_python – 正则表达式中[^.] *的含义是什么?
  4. 我想成为计算机专业第一,我对计算机专业学生的忠告。
  5. Theano 中文文档 0.9 - 7.2.4 条件
  6. 文件夹内的文本行数_重温生物信息重要的文本处理命令(实例命令及解释)
  7. XGBoost和GBDT的区别与联系
  8. 会扫地炒菜,将来机器人当钟点工
  9. 华表(cell)的使用总结
  10. 搜狗-国内首个双核浏览器
  11. 解决“微信与此IPAD不兼容
  12. 豆瓣250排行榜算法
  13. CUDA中的数学函数
  14. 【折腾电脑】Edge浏览器看B站视频卡顿最全解决办法合集
  15. linux脚本除号,Shell脚本编程(上)
  16. python0表示剪刀_简化Python代码(石头、纸、剪刀)
  17. C语言完整代码实现:二叉树的先序遍历、中序遍历、后序遍历
  18. echarts java导出功能_echarts图表导出excel示例
  19. Chrome HTTPS 您的连接不是私密连接 解决办法
  20. Python自动化淘宝秒杀

热门文章

  1. php格式转为jpg格式,psd格式怎么转换成jpg格式
  2. 遨博机械臂——使用moveit编程控制机械臂
  3. 给博客添加一个浮动小人
  4. 【笨嘴拙舌WINDOWS】tagTEXTMETRIC结构
  5. matlab小波变换特侦提取,如何利用小波变换的多分辨分析特性提取微弱的生命信号...
  6. 软件开发项目的风险管理
  7. 艾司博讯:拼多多千人千面含义及作用
  8. 接上一篇IEEE 标准 802.1Qav™-2009
  9. ipc备案和ipc证的关系
  10. 车辆遇险有eCall,eCall是什么?