关于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获取操作系统信息实例
Sep 02 Python
python如何修改装饰器中参数
Mar 20 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
python树莓派红外反射传感器
Jan 21 Python
python 多线程串行和并行的实例
Feb 22 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
Python 元组拆包示例(Tuple Unpacking)
Dec 24 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Pygame的程序开始示例代码
May 07 Python
windows支持哪个版本的python
Jul 03 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 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
php json_encode奇怪问题说明
2011/09/27 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
python实现贪吃蛇游戏
2020/03/21 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
Python装饰器用法与知识点小结
2020/03/09 Python
Python执行时间的几种计算方法
2020/07/31 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
HTML5 新事件 小结
2009/07/16 HTML / CSS
幼儿园大班毕业感言
2014/02/06 职场文书
老师对学生的寄语
2014/04/09 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers