关于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 ldap实现登录实例代码
Sep 30 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
Python批量发送post请求的实现代码
May 05 Python
Python实现多属性排序的方法
Dec 05 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
Python求均值,方差,标准差的实例
Jun 29 Python
对django 模型 unique together的示例讲解
Aug 06 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
Python中无限循环需要什么条件
May 27 Python
Django路由层如何获取正确的url
Jul 15 Python
Python实现文字pdf转换图片pdf效果
Apr 03 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类的使用 实例代码讲解
2009/12/28 PHP
PHP 编程安全性小结
2010/01/08 PHP
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
js删除所有的cookie的代码
2010/11/25 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
浅析return false的正确使用
2013/11/04 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
python实现扫描日志关键字的示例
2018/04/28 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
《陋室铭》教学反思
2014/02/26 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
森林病虫害防治方案
2014/06/02 职场文书
护理专业求职信
2014/06/15 职场文书
项目工作说明书
2014/07/29 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
学生退学证明
2015/06/23 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电