2017-01-05 5 views
2

Я пытаюсь получить очень простой читатель TFRecord для работы, но безрезультатно. (Я могу заставить писателя работать отлично).Невозможно получить простой читатель TFRecord для работы

От this github repo, есть reader.py файл, и это выглядит так:

import tensorflow as tf 
import numpy as np 
import time 
from PIL import Image 

def read_and_decode(filename_queue): 
    reader = tf.TFRecordReader() 
    _, serialized_example = reader.read(filename_queue) 
    features = tf.parse_single_example(
      serialized_example, 
      # Defaults are not specified since both keys are required. 
      features={ 
        'height':tf.FixedLenFeature([], tf.int64), 
        'image_raw': tf.FixedLenFeature([], tf.string), 
        'label': tf.FixedLenFeature([], tf.int64) 
      }) 
    image = tf.decode_raw(features['image_raw'], tf.uint8) 
    image = tf.reshape(image,[478, 717, 3]) 
    image = tf.cast(image, tf.float32) * (1./255) - 0.5 
    label = tf.cast(features['label'], tf.int32) 
    return image 


''' 
Pointers: Remember to run init_op 
      tf.reshape may not be the ideal way. 
''' 
def run(): 
    with tf.Graph().as_default(): 
     filename_queue = tf.train.string_input_producer(["sample.tfrecords"],num_epochs=1) 
     images = read_and_decode(filename_queue) 
     image_shape = tf.shape(images) 
     init_op = tf.initialize_all_variables() 
     with tf.Session() as sess: 
      sess.run(init_op) 
      coord = tf.train.Coordinator() 
      threads = tf.train.start_queue_runners(coord=coord) 
      img = sess.run([images]) 
      coord.request_stop() 
      coord.join(threads) 
run() 

Проблема заключается в том, что, когда я бегу, я получаю следующее сообщение об ошибке:

enter image description here

Итак, я в последний раз ударяю головой об этом. Я не уверен, что делать, или даже почему это не работает. Это похоже на простой пример, который не должен иметь проблемы. Я использую TF010.

Благодаря

ответ

1

В новой версии TensorFlow:

tf.initialize_all_variables() is deprecated.

Они упоминают, что вы должны использовать:

tf.global_variables_initializer()

Это не решит проблему. Если мы посмотрим на новый API tf.train.string_input_producer(), он упоминает, что num_epochs будет создан как локальная переменная. То, что происходит здесь в том, что нет ничего в очереди для того, чтобы читать, поэтому он говорит, что просил 1 тока 0. Просто добавьте это:

tf.local_variables_initializer()

Я нажал обновление.

+0

Мне любопытно, какую версию TF вы использовали, когда вы написали этот пример репо изначально? – Spacey

+0

Первый коммит был в марте 2016 года. Вероятно, от 0.7.0 до 0.8.0, если вы ссылаетесь на историю выпуска https://github.com/tensorflow/tensorflow/releases?after=v0.10.0rc0. – jkschin

+0

Поскольку я немного новичок в TensorFlow, позвольте мне спросить вас, что заставило вас подозревать, что это проблема с tf.initialize_all_variables() из загадочного сообщения об ошибке? – Spacey

1

Проблема может также быть не с TFRecords, но с использованием string_input_producer коллекции LOCAL_VARIABLES когда num_epochs установлен. См. here.

Операция tf.initialize_all_variables() не инициализирует все переменных, как следует из названия. Как быстро исправить, используйте следующее:

init_op = tf.group(tf.initialize_all_variables(), tf.initialize_local_variables())

, но рассмотреть собирается Tensorflow r0.12, где это оп осуждается в пользу tf.global_variables_initializer и tf.local_variables_initializer

+0

Позвольте мне попробовать это быстро ... – Spacey

+0

Поскольку я немного новичок в TensorFlow, позвольте мне спросить вас, что заставило вас подозревать, что это проблема с tf.initialize_all_variables() из загадочного сообщения об ошибке? – Spacey

+0

Я сам попал в эту ловушку. В моем случае сообщение было менее загадочным и касалось неинициализированных переменных, поэтому после некоторого поиска в Google я нашел дискуссию о github, которую я связал в исходном ответе. – standy