我正在尝试将数据输入到我的模型中。我关注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"))
并希望使用示例代码进行批处理,但我完全不了解它是如何工作的。
答案 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
格式并批量加载以训练您的网络。