版权声明:本文为博主原创文章,未经博主允许不得转载。 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
- tf.train.batch是按顺序读取数据,队列中的数据始终是一个有序的队列,
比如队列的capacity=20,开始队列内容为0,1,..,19=>读取10条记录后,队列剩下10,11,..,19,然后又补充10条变成=>10,11,…,29,
队头一直按顺序补充,队尾一直按顺序出队,到了第100条记录后,又重头开始补充0,1,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条记录), 再出队…