tensorflow组合训练数据(batch)

tensorflow提供了tf.train.batch和tf.train.shuffle_batch函数来将单个样例组织成batch的形式输出。这两个函数都会生成一个队列,队列的入队操作是生成单个样例的方法,而每次出队得到的是一个batch的样例。唯一的区别是是否会将数据顺序打乱。

1.tf.train.batch

batch_size=3
capacity=1000+3*batch_size
example_batch,label_batch=tf.train.batch(
    [example,label],batch_size=batch_size,capacity=capacity)

参数:

capacity给出了队列的最大容量,队列如果太大,需要占用很多的内存资源,如果太小,出队操作可能会因为没有数据而被阻碍(block),从而导致训练效率降低。当队列长度等于容量时,tensorflow将暂停入队操作,而只是等待元素出队。当元素个数小于容量时,tensorflow将自动重新启动入队操作。

2.tf.train.shuffle_batch

batch_size=3
capacity=1000+3*batch_size
example_batch,label_batch=tf.train.shuffle_batch(
    [example,label],batch_size=batch_size,capacity=capacity,min_after_dequeue=30)

参数:

min_after_dequeue限制了出队时队列中元素的最少个数。当队列中元素太少时随机打乱样例顺序的作用就不大了。当出队函数被调用但是队列中元素中不够时,出队操作应等待更多的元素入队才会完成。

对于tf.train.shuffle_batch多个线程会读取一个文件中的不同样例并进行预处理,如果需要多个线程处理不同文件中的样例时,可以使用tf.train.shuffle_batch_join

你可能感兴趣的:(深度学习)