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

作者:silence1214 时间:2023-11-04 19:49:54 

这两天一直在看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的样本和样本标签,只是一个是按照顺序,另外一个是随机的

来源:https://blog.csdn.net/silence1214/article/details/77141396

标签:Tensorflow,tf.train.batch
0
投稿

猜你喜欢

  • Python学习之列表常用方法总结

    2021-11-24 18:43:19
  • MySQL索引用法实例分析

    2024-01-22 16:42:22
  • 用Dreamweaver设计实现网页过渡转换功能

    2008-09-04 10:09:00
  • SQL语句中的一些特殊参数如何用变量来代替

    2008-03-14 07:44:00
  • python实现转圈打印矩阵

    2022-10-28 09:23:20
  • 分享十个Python提高工作效率的自动化脚本

    2023-12-20 21:34:05
  • 如何使用Django(python)实现android的服务器端

    2022-09-25 01:06:43
  • golang结构体与json格式串实例代码

    2024-04-27 15:36:44
  • 使用JavaScript实现旋转的彩圈特效

    2023-08-22 16:34:53
  • Python如何向SQLServer存储二进制图片

    2021-01-06 08:23:54
  • SQL Server 2005 内置工具建审查系统

    2009-01-19 14:24:00
  • django中瀑布流写法实例代码

    2022-08-04 11:11:26
  • centos6.5安装python3.7.1之后无法使用pip的解决方案

    2022-06-27 17:12:09
  • mysql 8.0.18 安装配置优化教程

    2024-01-19 22:43:59
  • python 实现数据库中数据添加、查询与更新的示例代码

    2023-10-08 04:09:51
  • Go/C语言LeetCode题解997找到小镇法官

    2024-05-21 10:18:54
  • 6个asp判断函数使用方法介绍

    2007-09-24 13:10:00
  • XHTML 和 DOCTYPE 切换

    2007-05-31 09:30:00
  • Python实现按照指定要求逆序输出一个数字的方法

    2023-12-21 23:37:46
  • JS实现pasteHTML兼容ie,firefox,chrome的方法

    2023-09-21 01:55:10
  • asp之家 网络编程 m.aspxhome.com