Wie verwende ich den TensorFlow-Reader und die Warteschlange, um zwei Dateien gleichzeitig zu lesen?

Mein Trainingssatz enthält zwei Arten von Dateien: ein Trainingsbild mit einem Dateinamen wie "1.png" und eine Etikettendatei mit einem Namen wie "1.label.txt".

Ich habe in Tutorials wie diesem eine Verwendung von Queue und Reader gefunden:

filename_queue = tf.train.string_input_producer(filenames)
result.key, value = reader.read(filename_queue)

Da mein Trainingsset jedoch zwei Arten von Dateien enthält, entspricht eine einer. Wie kann ich Queue und Reader wie den obigen Code verwenden?

BEARBEITE

Ich denke darüber nach, eine Warteschlange mit Basisnamen zu verwenden, um zwei weitere Warteschlangen zu füttern, nämlich image und label. Code wie folgt:

with tf.Session() as sess:
  base_name_queue = tf.train.string_input_producer(['image_names'], num_epochs=20)
  base_name = base_name_queue.dequeue()
  image_name = base_name + ".png"
  image_name_queue = data_flow_ops.FIFOQueue(32, image_name.dtype.base_dtype)
  image_name_queue.enqueue([image_name])
  x = image_name_queue.dequeue()
  print_op = tf.Print(image_name, [image_name])

  qr = tf.train.QueueRunner(base_name_queue, [base_name_queue] * 4)
  coord = tf.train.Coordinator()
  enqueue_threads = qr.create_threads(sess, coord=coord, start=True)

  for step in range(1000000):
    if coord.should_stop():
      break
    print(sess.run(print_op))

  coord.request_stop()
  coord.join(enqueue_threads)

Das Ausführen dieses Codes würde zu einem Fehler führen:

TypeError: Abrufargument mit ungültigem Typ, muss ein String oder ein Tensor sein. (FIFOQueue kann nicht in Tensor oder Operation konvertiert werden.)

und der Fehler zeigen auf diese Zeile:

coord.join(enqueue_threads)

Ich denke, ich muss falsch verstehen, wie TensorFlow-Warteschlange funktioniert.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage