我只是偶然发现了这个问题: TensorFlow - Read all examples from a TFRecords at once?
第一个答案建议使用tf.parse_example而不是解析单个示例,因为这似乎更快。但是提供的代码并不完整,我不知道如何使用它。如果我批处理然后使用parse_example,我将获得一批功能。这意味着我需要解压缩该批处理以解码jpegs?答案的代码是:
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(serialized_example, features={
image/center': tf.VarLenFeature(tf.string),
})
image = features['image/center']
image_decoded = tf.image.decode_jpeg(image.values[0], channels=3)
return image_decoded
建议切换到:
batch = tf.train.batch([serialized_example], num_examples, capacity=num_examples)
parsed_examples = tf.parse_example(batch, feature_spec)
但是我现在如何解码那些parsed_examples?
答案 0 :(得分:3)
我遇到了同样的问题。我采用的方式是使用TensorFlow的higher order operators,tf.map_fn
具体:
batch = tf.train.batch([serialized_example], num_examples, capacity=num_examples)
parsed_examples = tf.parse_example(batch,
features={
'image_jpg': tf.FixedLenFeature([], tf.string),
})
raw_bytes_batch = parsed_examples['image_jpg']
def decode(raw_bytes):
return tf.image.decode_jpeg(raw_bytes, channels=3)
image_decoded = tf.map_fn(decode, raw_bytes_batch, dtype=tf.uint8,
back_prop=False, parallel_iterations=10)
# image_decoded.set_shape([None, ..., ..., 3])
这应该在JPEG上并行运行decode
函数。