在Tensorflow中为png图像选择哪些读者?

时间:2017-06-25 14:36:18

标签: python tensorflow

我正在尝试将数据输入到我的模型中。我关注Reading data | Tensorflow。 现在我有一些关于批处理代码示例的问题:

def read_my_file_format(filename_queue):
  reader = tf.SomeReader()
  key, record_string = reader.read(filename_queue)
  example, label = tf.some_decoder(record_string)
  processed_example = some_processing(example)
  return processed_example, label

def input_pipeline(filenames, batch_size, num_epochs=None):
  filename_queue = tf.train.string_input_producer(
      filenames, num_epochs=num_epochs, shuffle=True)
  example, label = read_my_file_format(filename_queue)
  # min_after_dequeue defines how big a buffer we will randomly sample
  #   from -- bigger means better shuffling but slower start up and more
  #   memory used.
  # capacity must be larger than min_after_dequeue and the amount larger
  #   determines the maximum we will prefetch.  Recommendation:
  #   min_after_dequeue + (num_threads + a small safety margin) * batch_size
  min_after_dequeue = 10000
  capacity = min_after_dequeue + 3 * batch_size
  example_batch, label_batch = tf.train.shuffle_batch(
      [example, label], batch_size=batch_size, capacity=capacity,
      min_after_dequeue=min_after_dequeue)
  return example_batch, label_batch

我应该使用什么读者?我看了possible readers,但对我来说,似乎我可以使用除TextLineReader之外的任何阅读器。那么我应该为png图像使用什么? WholeFileReader或FixedLengthRecordReader或另一个?

我的另一个问题是这个例子中的批处理如何工作?函数 read_my_file_format 仅输出1个示例和标签,它们被输入 shuffle_batch 。但是,如果它只是一个例子,那么shuffle_batch如何改变任何东西以及如何使批量大于1呢?

现在我有一个像这样的FIFO队列:

filename_queue = tf.train.string_input_producer(tf.train.match_filenames_once(images_path + "*.png"))

并希望使用示例代码进行批处理,但我完全不了解它是如何工作的。

1 个答案:

答案 0 :(得分:0)

您的输入不是固定的长度大小,因此我们不能使用tf.FixedLengthRecordReader(),而不是TFRecords格式,因此不能使用tf.TFRecordReader()也不能使用文本文件,因此无法使用{{ 1}}和tf.TextLineReader()是创建自己的读者。

您可以使用tf.ReaderBase()阅读整个图像,然后将其提供给tf.WholeFileReader()以解码png格式。您的tf.image.decode_png()功能将是:

read_my_file_format()

def read_my_file_format(filename_queue): reader = tf.WholeFileReader() key, record_string = reader.read(filename_queue) example = tf.image.decode_png(record_string) processed_example, label = some_processing(example) return processed_example, label 是一个队列,其中单个示例被'排队'(添加到队列中)。 param shuffle_batch是训练开始前的预取,'capacity'决定了队列的容量。这两个参数会影响训练表现 一种有效的方法是将图像转换为min_after_dequeue格式并批量加载以训练您的网络。