例如,在创建操作,通过该操作馈送批处理数据并运行该操作之后,tf.train.batch是否自动将另一批数据馈送给会话?

我之所以这样问,是因为tf.train.batch具有allow_smaller_final_batch属性,这使得最终批次的加载小于指定的批次大小成为可能。这是否意味着即使没有循环,也可以自动喂入下一批?从教程代码中我很困惑。当我加载一个批次时,实际上是一个形状为[batch_size,height,width,num_channels]的单个批次,但是documentation表示为Creates batches of tensors in tensors.另外,当我阅读tf-slim walkthrough tutorial中的教程代码时,在一个名为load_batch的函数中,仅返回3个张量:images, images_raw, labels。文档中说明的数据“批”在哪里?

谢谢您的帮助。

最佳答案

... tf.train.batch是否自动将另一批数据输入会话?


不,没有任何自动发生。您必须再次调用sess.run(...)来加载新批次。


  这是否意味着即使没有循环,也可以自动喂入下一批?


否。tf.train.batch(..)将始终加载batch_size张量。例如,如果您有100张图像和一个batch_size=30,则将有3 * 30批次,因为您可以在输入队列从头开始(如果为sess.run(batch)则停止)之前调用epoch=1三次。这意味着您会错过训练中的100-3*30=10个样本。如果您不想错过它们,可以执行tf.train.batch(..., allow_smaller_final_batch=True),这样在重新开始输入队列之前,您将拥有3个30样本批和1个10样本批。

让我还详细说明一个代码示例:

queue = tf.train.string_input_producer(filenames,
        num_epochs=1) # only iterate through all samples in dataset once

reader = tf.TFRecordReader() # or any reader you need
_, example = reader.read(queue)

image, label = your_conversion_fn(example)

# batch will now load up to 100 image-label-pairs on sess.run(...)
# most tf ops are tuned to work on batches
# this is faster and also gives better result on e.g. gradient calculation
batch = tf.train.batch([image, label], batch_size=100)

with tf.Session() as sess:
    # "boilerplate" code
    sess.run([
        tf.local_variables_initializer(),
        tf.global_variables_initializer(),
    ])
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)

    try:
        # in most cases coord.should_stop() will return True
        # when there are no more samples to read
        # if num_epochs=0 then it will run for ever
        while not coord.should_stop():
            # will start reading, working data from input queue
            # and "fetch" the results of the computation graph
            # into raw_images and raw_labels
            raw_images, raw_labels = sess.run([images, labels])
    finally:
        coord.request_stop()
        coord.join(threads)

关于machine-learning - TensorFlow:批次完成训练后,tf.train.batch是否会自动加载下一个批次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41673889/

10-12 23:52