1

Ich versuche, eine Warteschlange in Tensorflow aus einer Liste von Dateinamen zu machen. Die Liste wurde erstellt, aber es scheint, dass der String-Input-Producer eine leere Warteschlange zurückgegeben hat. Es kann andere Gründe geben, dass der Code nicht funktioniert. Unten ist der Code:tensorflow string_input_producer gibt leere Warteschlange

sess = tf.InteractiveSession() 

def read_my_file_format(filename_queue): 
    reader = tf.WholeFileReader() 
    key, value = reader.read(filename_queue) 
    images = tf.image.decode_jpeg(value, channels=3) 
    return images, key 

def input_pipeline(filenames, batch_size, num_epochs, labels): 
    filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=False) 
    image, key = read_my_file_format(filename_queue) 
    return image, key 

sess.run(tf.global_variables_initializer()) 

coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(sess = sess, coord = coord, start=True) 

input_pipeline(trainnames, batch_size, None, labels) 

coord.request_stop() 
coord.join(threads) 

Antwort

0

Wenn Sie die Fehlermeldung zur Verfügung stellen könnte, würde es helfen.

In der gleichen Zeit, hier sind ein paar Bemerkungen über Ihren Code:

  • Verfahren input_pipeline die TensorFlow Operatoren zugeordnet Warteschlange definiert und fügen Sie sie in dem Graphen, so dass Sie es vor dem Aufruf von sess.run(tf.global_variables_initializer()) anrufen sollte, wenn Sie möchten, dass die Warteschlange Teil des Diagramms und vor dem Aufruf an start_queue_runners ist, wenn Ihre Warteschlange vom Koordinator gestartet werden soll.
  • Sie haben TensorFlow nicht aufgefordert, Ihre image, key-Operatoren tatsächlich auszuführen.

Hier ist der Code, den ich versuchen würde:

sess = tf.InteractiveSession() 

def read_my_file_format(filename_queue): 
    reader = tf.WholeFileReader() 
    key, value = reader.read(filename_queue) 
    images = tf.image.decode_jpeg(value, channels=3) 
    return images, key 

def input_pipeline(filenames, batch_size, num_epochs, labels): 
    filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=False) 
    image, key = read_my_file_format(filename_queue) 
    return image, key 

# Let us define the queue operators and add them to the default graph. 
image, key = input_pipeline(trainnames, batch_size, None, labels) 

sess.run(tf.global_variables_initializer()) 

coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(sess = sess, coord = coord, start=True) 

# Let's run the image, key tensors. 
sess.run([image, key]) 

coord.request_stop() 
coord.join(threads) 
+0

Können Sie mir bitte auch sagen, wie die Pipeline mit der Grafik zu kombinieren? Ich habe gelernt, dass wir einem Platzhalter des Graphen keine Tensoren zuführen können, in diesem Fall wie soll ich dem Graphen Input geben? Ich habe einen Zugverband und einen Testsatz in zwei verschiedenen Warteschlangen. Ist es möglich, beide in einen Graphen einzugeben? Wenn ich einen Graphen als Funktion definiere, erstellt er jedes Mal, wenn ich ihn aufruft, einen neuen Graphen oder gibt er denselben alten Graphen zurück? – ALeex

+0

Nun, im Grunde ist die Pipeline (z. B. 'filename_queue',' image', 'key', ...) Teil des Graphen. Wenn Sie Platzhaltertensoren nicht manuell mit einem feed_dict einspeisen möchten, können Sie den Bildtensor verwenden, um direkt in den Graphen zu gelangen. Im Grunde verwenden Sie einfach Ihre Dequeue-Op, wie Sie Ihren Platzhalter verwendet hätten. Ich würde empfehlen, lesen [die reading_data Abschnitt] (https://www.tensorflow.org/programmers_guide/reading_data) und werfen Sie einen Blick auf die Beispiele. In Bezug auf Ihre letzten Fragen könnte dieser [Abschnitt] (https://www.tensorflow.org/programmers_guide/variables) von Interesse sein. – npf

+0

Danke, dass du mir geholfen hast. Ich habe gelesen, dass ich vor dem Öffnen der Frage immer noch nicht sicher bin, was ich tun soll, nachdem ich es gelesen habe. Also füge ich Dateiname_Queue, Bild und Schlüssel in das Diagramm ein. Ich nehme an, dass das Ausführen von 'sess.run ([image, key])' beginnt, aus der Warteschlange herauszutreten und das Diagramm zu durchlaufen? Oder ist es nur zum Erhalten der Bildtensoren ohne Training? Um Pipelineteil des Diagramms zu machen, habe ich es nicht gefunden, wie man beide Pipelines des Trainingssatzes und des Testsets gibt, wissen Sie darüber? – ALeex

Verwandte Themen