Lectura y visualización de imágenes de Tensorflow

Tengo un montón de imágenes en un formato similar a Cifar10 (archivo binario,size = 96*96*3 bytes por imagen), una imagen tras otra (Conjunto de datos STL-10) El archivo que estoy abriendo tiene 138MB.

Traté de leer y verificar el contenido de los tensores que contienen las imágenes para asegurarme de que la lectura se realiza correctamente, sin embargo, tengo dos preguntas:

Hace elFixedLengthRecordReader cargar todo el archivo, sin embargo, ¿solo proporcionar entradas una por una? Desde leer el primerosize Los bytes deben ser relativamente rápidos. Sin embargo, el código tarda unos dos minutos en ejecutarse.¿Cómo obtener el contenido real de la imagen en un formato visualizable, o mostrarlos internamente para validar que las imágenes se leen bien? yo hicesess.run(uint8image), sin embargo, el resultado está vacío.

El código está abajo:

import tensorflow as tf
def read_stl10(filename_queue):
  class STL10Record(object):
    pass
  result = STL10Record()

  result.height = 96
  result.width = 96
  result.depth = 3
  image_bytes = result.height * result.width * result.depth
  record_bytes = image_bytes

  reader = tf.FixedLengthRecordReader(record_bytes=record_bytes)
  result.key, value = reader.read(filename_queue)
  print value
  record_bytes = tf.decode_raw(value, tf.uint8)

  depth_major = tf.reshape(tf.slice(record_bytes, [0], [image_bytes]),
                       [result.depth, result.height, result.width])
  result.uint8image = tf.transpose(depth_major, [1, 2, 0])
  return result
# probably a hack since I should've provided a string tensor

filename_queue = tf.train.string_input_producer(['./data/train_X'])
image = read_stl10(filename_queue)

print image.uint8image
with tf.Session() as sess:
  result = sess.run(image.uint8image)
  print result, type(result)

Salida:

Tensor("ReaderRead:1", shape=TensorShape([]), dtype=string)
Tensor("transpose:0", shape=TensorShape([Dimension(96), Dimension(96), Dimension(3)]), dtype=uint8)
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
[empty line for last print]
Process finished with exit code 137

Estoy ejecutando esto en mi CPU, si eso agrega algo.

EDITAR: Encontré la solución pura de TensorFlow gracias a Rosa. Aparentemente, cuando se usa elstring_input_producer, para ver los resultados, debe inicializar los corredores de cola. Lo único que se requiere agregar al código anterior es la segunda línea desde abajo:

...
with tf.Session() as sess:
    tf.train.start_queue_runners(sess=sess)
...

Luego, la imagen en elresult se puede mostrar conmatplotlib.pyplot.imshow(result). Espero que esto ayude a alguien. Si tiene más preguntas, no dude en preguntarme o verifique el enlace en la respuesta de Rosa.

Respuestas a la pregunta(7)

Su respuesta a la pregunta