Zugreifen auf den Dateinamen aus der Dateiwarteschlange in Tensor Flow

8

Ich habe ein Verzeichnis von Bildern und eine separate Datei, die Bilddateinamen mit Beschriftungen vergleicht. Das Verzeichnis der Bilder hat also Dateien wie 'train / 001.jpg' und die Beschriftungsdatei sieht so aus:

%Vor%

Ich kann einfach Bilder aus dem Bildverzeichnis in Tensor Flow laden, indem ich einen Datei-Queue aus den Dateinamen erzeuge:

%Vor%

Aber ich weiß nicht, wie ich diese Dateien mit den Etiketten aus der Beschriftungsdatei verbinden soll. Es scheint, dass ich bei jedem Schritt auf die Dateinamen in der Warteschlange zugreifen muss. Gibt es eine Möglichkeit, sie zu bekommen? Außerdem muss ich, sobald ich den Dateinamen habe, in der Lage sein, nach dem Label zu suchen, das mit dem Dateinamen versehen ist. Es scheint, als würde ein Standard-Python-Wörterbuch nicht funktionieren, da diese Berechnungen bei jedem Schritt im Graphen stattfinden müssen.

    
bschreck 02.12.2015, 19:21
quelle

5 Antworten

10

Da Ihre Daten nicht zu groß sind, um die Liste der Dateinamen als Python-Array zu liefern, würde ich nur die Vorverarbeitung in Python vorschlagen. Erstellen Sie zwei Listen (dieselbe Reihenfolge) der Dateinamen und der Beschriftungen, und fügen Sie diese entweder in eine zufällige Zufallsauswahl oder in eine Warteschlange ein und trennen Sie sie daraus. Wenn Sie das Verhalten "loops unendlich" von string_input_producer möchten, können Sie die 'Enqueue' am Anfang jeder Epoche erneut ausführen.

Ein sehr Spielzeug-Beispiel:

%Vor%

Der Schlüssel ist, dass Sie Paare von Dateinamen / Labels effektiv in die Warteschlange stellen, wenn Sie enqueue ausführen, und diese Paare werden von dequeue zurückgegeben.

    
dga 03.12.2015, 00:54
quelle
4

Hier ist, was ich konnte.

Ich habe zuerst die Dateinamen gemischt und die Bezeichnungen in Python mit ihnen abgeglichen:

%Vor%

Dann wurde für die Dateinamen mit shuffle off ein string_input_producer und für Etiketten ein FIFO erstellt:

%Vor%

Dann, um das Bild zu lesen, könnte ich einen WholeFileReader verwenden und um die Bezeichnung zu erhalten, könnte ich den FIFO herausnehmen:

%Vor%

Und erzeugen Sie die Chargen wie folgt:

%Vor%     
bschreck 03.12.2015 16:47
quelle
1

Es gibt tf.py_func() , das Sie verwenden könnten, um ein Mapping vom Dateipfad zum Label zu implementieren.

%Vor%     
Yuntai Kyong 27.03.2017 13:48
quelle
0

Ich habe das benutzt:

%Vor%     
Linda MacPhee-Cobb 29.03.2017 22:21
quelle
0

Ein anderer Vorschlag besteht darin, Ihre Daten im Format TFRecord zu speichern. In diesem Fall können Sie alle Bilder und Beschriftungen in derselben Datei speichern. Für eine große Anzahl von Dateien gibt es eine Menge Vorteile:

  • kann Daten und Labels an derselben Stelle speichern
  • Daten werden an einer Stelle zugewiesen (Sie müssen sich nicht an verschiedene Verzeichnisse erinnern)
  • Wenn es viele Dateien (Bilder) gibt, ist das Öffnen / Schließen einer Datei zeitaufwendig. Suchen Sie den Speicherort der Datei von SSD / HDD auch braucht Zeit
Salvador Dali 02.07.2017 11:15
quelle

Tags und Links