2016-11-15 3 views
2

ich gerade über diese Frage gestolpert: TensorFlow - Read all examples from a TFRecords at once?Tensorflow: Verwenden Sie tf.parse_example für JPEG-Chargen

Und die erste Antwort vorschlagen tf.parse_example anstelle einzelne Beispiele für das Parsen, weil das schneller zu sein scheint. Aber der Code zur Verfügung gestellt ist nicht vollständig und ich weiß nicht, wie ich das verwenden kann. Wenn ich stapelweise und dann parse_example benutze, erhalte ich eine Charge von Features. Das bedeutet, dass ich diese Charge auspacken muss, um die JPEGs zu entschlüsseln? Der Code aus der Antwort lautet:

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 

und schlagen die Umstellung auf:

batch = tf.train.batch([serialized_example], num_examples, capacity=num_examples) 
parsed_examples = tf.parse_example(batch, feature_spec) 

Aber wie kann ich jetzt diese parsed_examples entschlüsseln?

+0

Was passiert, wenn Sie es so ausführen, wie es ist? Laut [tf.decode_raw documentation] (https://www.tensorflow.org/versions/r0.11/api_docs/python/io_ops.html#decode_raw) sollte es den gesamten Batch von Beispielen dekodieren. – sygi

+1

Ah Entschuldigung, ich habe diesen Code von der anderen Frage kopiert, ohne zu merken, dass es ein bisschen anders ist. Ich benutze JPEGs ... Ich werde die Frage bearbeiten! tf.image.decode_jpeg unterstützt keine Chargen, die ich denke –

Antwort

2

Ich hatte das gleiche Problem. Die Art, wie ich es ging durch die higher order operators von TensorFlow Verwendung tf.map_fn spezifisch sein:

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]) 

Dies sollte die decode Funktion auf dem JPEGs parallel laufen.

Verwandte Themen