在Tensorflow教程中,它提供了以下有关以下示例tf.train.shuffle_batch():
# Creates batches of 32 images and 32 labels.
image_batch, label_batch = tf.train.shuffle_batch(
[single_image, single_label],
batch_size=32,
num_threads=4,
capacity=50000,
min_after_dequeue=10000)
Run Code Online (Sandbox Code Playgroud)
我不太清楚capacity和的含义min_after_dequeue.在这个例子中,它被设定为50000和10000分别.这种设置的逻辑是什么,或者是什么意思.如果输入有200个图像和200个标签,会发生什么?
mrr*_*rry 25
该tf.train.shuffle_batch()函数使用tf.RandomShuffleQueue内部来累积批量batch_size元素,这些元素从当前队列中的元素中随机均匀地采样.
许多训练算法,例如TensorFlow用于优化神经网络的基于随机梯度下降的算法,依赖于从整个训练集中随机均匀地采样记录.但是,将整个训练集加载到内存中(以便从中进行采样)并不总是切实可行的,因此tf.train.shuffle_batch()提供了折衷方案:它使用between min_after_dequeue和capacityelements 填充内部缓冲区,并从该缓冲区中随机均匀地采样.对于许多培训过程,这可以提高模型的准确性并提供足够的随机化.
这些min_after_dequeue和capacity论点对培训绩效产生间接影响.设置较大的min_after_dequeue值会延迟训练的开始,因为TensorFlow必须在训练开始之前处理至少那么多元素.它capacity是输入管道将消耗的内存量的上限:设置太大可能导致训练过程耗尽内存(并且可能开始交换,这将损害训练吞吐量).
如果数据集只有200个图像,则可以轻松地将整个数据集加载到内存中.tf.train.shuffle_batch()效率很低,因为它会将每个图像排列并多次标记tf.RandomShuffleQueue.在这种情况下,您可能会发现使用tf.train.slice_input_producer()和执行以下操作更有效tf.train.batch():
random_image, random_label = tf.train.slice_input_producer([all_images, all_labels],
shuffle=True)
image_batch, label_batch = tf.train.batch([random_image, random_label],
batch_size=32)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4622 次 |
| 最近记录: |