1

I was trying to understand the mechanism of tensorflow for reading images using queues. I was using the code found here, whom basic parts are:

filename_queue = tf.train.string_input_producer(tf.train.match_filenames_once('D:/Dataset/*.jpg'))
image_reader = tf.WholeFileReader()
image_name, image_file = image_reader.read(filename_queue)
image = tf.image.decode_jpeg(image_file)

with tf.Session() as sess:
    tf.global_variables_initializer().run()

    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)

    image_tensor = sess.run([image])
    print(image_tensor)

which in reality does nothing special. I was getting an error:

OutOfRangeError (see above for traceback): FIFOQueue '_0_input_producer' is closed and has insufficient elements (requested 1, current size 0)

which lead to search for missing images, wrong folder, wrong glob pattern etc until I discovered that tensorflow basically meant this: "You need to initialize local variables also"!

Besides the fact that the code seemed to work in the original gist with just this substitution:

tf.initialize_all_variables().run()

instead of

tf.global_variables_initializer().run()

in my code it does not work. It produces the same error. I guess it has changed the implementation of initialize_all_variables() with tensorflow development (I am using 1.3.0), since in here it mentions that it initialize local variables also.

So, the final conclusion I came with was that I should initialize local variables also. And my code worked. The error message is awfully misleading (which did not help at all) but anyway to the main part I am a bit confused why am I getting a local variable by match_filenames_once. In documentation there is no reference about this (I am not sure it should though).

Am I always going to get local from this match_filenames_once? Can I control it somehow?

Eypros
  • 5,370
  • 6
  • 42
  • 75

0 Answers0