Я пытаюсь реализовать входной конвейер для своей модели, которая читает из двоичных файлов TFRecords; каждый двоичный файл содержит один пример (изображение, ярлык, другие вещи, которые мне нужны)Входной конвейер тензорного потока: образцы читаются более одного раза
У меня есть текстовый файл с файловым списком путей; то:
- Я прочитал текстовый файл как список, который я передаю string_input_producer() для генерации очереди;
- я кормить очереди к TFRecordReader, который читает сериализованный пример, и я декодировать двоичные данные
- Я использую shuffle_batch(), чтобы расположить примеры во партии
- Я использую партию, чтобы оценить мою модель
проблема заключается в том, что оказывается, что один и тот же пример можно прочитать несколько раз, а некоторые примеры вообще не могут быть посещены; Я установил количество шагов как общее количество изображений, деленное на размер партии; поэтому я ожидаю, что в конце последнего шага все входные примеры были посещены, но это не так; вместо этого некоторые из них посещаются более одного раза, а некоторые никогда (случайно); это делает моя оценка тест полностью unrealiable
если кто-нибудь имеет намек на то, что я делаю неправильно, пожалуйста, дайте мне знать
упрощенная версия моего кода для тестирования модели ниже; Спасибо!
def my_input(file_list, batch_size)
filename = []
f = open(file_list, 'r')
for line in f:
filename.append(params.TEST_RECORDS_DATA_DIR + line[:-1])
filename_queue = tf.train.string_input_producer(filename)
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(
serialized_example,
features={
'image_raw': tf.FixedLenFeature([], tf.string),
'label_raw': tf.FixedLenFeature([], tf.string),
'name': tf.FixedLenFeature([], tf.string)
})
image = tf.decode_raw(features['image_raw'], tf.uint8)
image.set_shape(params.IMAGE_HEIGHT*params.IMAGE_WIDTH*3)
image = tf.reshape(image, (params.IMAGE_HEIGHT,params.IMAGE_WIDTH,3))
image = tf.cast(image, tf.float32)/255.0
image = preprocess(image)
label = tf.decode_raw(features['label_raw'], tf.uint8)
label.set_shape(params.NUM_CLASSES)
name = features['name']
images, labels, image_names = tf.train.batch([image, label, name],
batch_size=batch_size, num_threads=2,
capacity=1000 + 3 * batch_size, min_after_dequeue=1000)
return images, labels, image_names
def main()
with tf.Graph().as_default():
# call input operations
images, labels, image_names = my_input(file_list=params.TEST_FILE_LIST, batch_size=params.BATCH_SIZE)
# load a trained model and make predictions
prediction = infer(images, labels, image_names)
with tf.Session() as sess:
for step in range(params.N_STEPS):
prediction_values = sess.run([prediction])
# process output
return
спасибо за ответ; – bfra
Я установил количество потоков в 1, num_epochs = 1, и я инициализирую локальные переменные, как вы сказали; то я получаю следующую ошибку: W tensorflow/core/framework/op_kernel.cc: 968] Вне диапазона: FIFOQueue '_1_batch/fifo_queue' закрыт и имеет недостаточные элементы (запрошенный 1, текущий размер 0) – bfra
после 177 примеров, которые ровно половину числа примеров для оценки; есть что-то концептуальное, я, вероятно, отсутствую – bfra