关于Tensorflow中的tf.train.batch函数的使用


Posted in Python onApril 24, 2018

这两天一直在看tensorflow中的读取数据的队列,说实话,真的是很难懂。也可能我之前没这方面的经验吧,最早我都使用的theano,什么都是自己写。经过这两天的文档以及相关资料,并且请教了国内的师弟。今天算是有点小感受了。简单的说,就是计算图是从一个管道中读取数据的,录入管道是用的现成的方法,读取也是。为了保证多线程的时候从一个管道读取数据不会乱吧,所以这种时候 读取的时候需要线程管理的相关操作。今天我实验室了一个简单的操作,就是给一个有序的数据,看看读出来是不是有序的,结果发现是有序的,所以直接给代码:

import tensorflow as tf
import numpy as np

def generate_data():
  num = 25
  label = np.asarray(range(0, num))
  images = np.random.random([num, 5, 5, 3])
  print('label size :{}, image size {}'.format(label.shape, images.shape))
  return label, images

def get_batch_data():
  label, images = generate_data()
  images = tf.cast(images, tf.float32)
  label = tf.cast(label, tf.int32)
  input_queue = tf.train.slice_input_producer([images, label], shuffle=False)
  image_batch, label_batch = tf.train.batch(input_queue, batch_size=10, num_threads=1, capacity=64)
  return image_batch, label_batch

image_batch, label_batch = get_batch_data()
with tf.Session() as sess:
  coord = tf.train.Coordinator()
  threads = tf.train.start_queue_runners(sess, coord)
  i = 0
  try:
    while not coord.should_stop():
      image_batch_v, label_batch_v = sess.run([image_batch, label_batch])
      i += 1
      for j in range(10):
        print(image_batch_v.shape, label_batch_v[j])
  except tf.errors.OutOfRangeError:
    print("done")
  finally:
    coord.request_stop()
  coord.join(threads)

记得那个slice_input_producer方法,默认是要shuffle的哈。

Besides, I would like to comment this code.

1: there is a parameter ‘num_epochs' in slice_input_producer, which controls how many epochs the slice_input_producer method would work. when this method runs the specified epochs, it would report the OutOfRangeRrror. I think it would be useful for our control the training epochs.

2: the output of this method is one single image, we could operate this single image with tensorflow API, such as normalization, crops, and so on, then this single image is feed to batch method, a batch of images for training or testing wouldbe received.

tf.train.batch和tf.train.shuffle_batch的区别用法

tf.train.batch([example, label], batch_size=batch_size, capacity=capacity):[example, label]表示样本和样本标签,这个可以是一个样本和一个样本标签,batch_size是返回的一个batch样本集的样本个数。capacity是队列中的容量。这主要是按顺序组合成一个batch

tf.train.shuffle_batch([example, label], batch_size=batch_size, capacity=capacity, min_after_dequeue)。这里面的参数和上面的一样的意思。不一样的是这个参数min_after_dequeue,一定要保证这参数小于capacity参数的值,否则会出错。这个代表队列中的元素大于它的时候就输出乱的顺序的batch。也就是说这个函数的输出结果是一个乱序的样本排列的batch,不是按照顺序排列的。

上面的函数返回值都是一个batch的样本和样本标签,只是一个是按照顺序,另外一个是随机的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中的__init__和__new__
Mar 12 Python
跟老齐学Python之玩转字符串(1)
Sep 14 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
python3 读写文件换行符的方法
Apr 09 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
python 日期操作类代码
May 05 Python
python利用微信公众号实现报警功能
Jun 10 Python
Django实战之用户认证(初始配置)
Jul 16 Python
Python实现多属性排序的方法
Dec 05 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
基于python实现图片转字符画代码实例
Sep 04 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 #Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 #Python
Windows上使用Python增加或删除权限的方法
Apr 24 #Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 #Python
解决python删除文件的权限错误问题
Apr 24 #Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 #Python
python3+PyQt5实现拖放功能
Apr 24 #Python
You might like
杏林同学录(七)
2006/10/09 PHP
PHP的面试题集
2006/11/19 PHP
《PHP边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
Yii中表单用法实例详解
2016/01/05 PHP
php for 循环使用的简单实例
2016/06/02 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
jQuery的强大选择器小结
2009/12/27 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
react-native fetch的具体使用方法
2017/11/01 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
python3实现基于用户的协同过滤
2018/05/31 Python
基于python实现聊天室程序
2018/07/27 Python
关于python3中setup.py小概念解析
2019/08/22 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
大二法英学生职业生涯规划范文
2014/02/27 职场文书
司法所长先进事迹
2014/06/02 职场文书
集中采购方案
2014/06/10 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python