[tensorflow教程] [cifar10] tf.train.batch和tf.train.shuffle_batch的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014256231/article/details/79049165

_generate_image_and_label_batch函数中,遇到tf.train.batch和tf.train.shuffle_batch两个函数,
具体用法如下:

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

  • tf.train.shuffle_batch ([example, label], batch_size = batch_size, capacity = capacity, min_after_dequeue):
    参数min_after_dequeue是出队后,队列至少剩下min_after_dequeue个数据。函数功能是输出一个乱序的样本排列的batch。
    上面的函数返回值都是一个batch的样本和样本标签,只是一个是按照顺序,另外一个是随机的。

举个例子:

假设现在有个test.tfrecord文件,里面按从小到大顺序存放整数0~100

  1. tf.train.batch是按顺序读取数据,队列中的数据始终是一个有序的队列,
    比如队列的capacity=20,开始队列内容为0,1,..,19=>读取10条记录后,队列剩下10,11,..,19,然后又补充10条变成=>10,11,…,29,
    队头一直按顺序补充,队尾一直按顺序出队,到了第100条记录后,又重头开始补充0,1,2…
  2. tf.train.shuffle_batch是将队列中数据打乱后,再读取出来,因此队列中剩下的数据也是乱序的,队头也是一直在补充,
    比如batch_size=5,capacity=10,min_after_dequeue=4,
    初始是有序的0,1,..,9(10条记录), 然后打乱8,2,6,4,3,7,9,2,0,1(10条记录),
    队尾取出5条,剩下7,9,2,0,1(5条记录),
    然后又按顺序补充进来,变成7,9,2,0,1,10,11,12,13,14(10条记录),
    再打乱13,10,2,7,0,12…1(10条记录), 再出队…

猜你喜欢

转载自blog.csdn.net/u014256231/article/details/79049165