2016-06-23 5 views
7

Jedes Tensorflow-Tutorial, das ich bisher finden konnte, funktioniert, indem zuerst die Trainings-/Validierungs-/Testbilder in den Speicher geladen und dann verarbeitet werden. Hat jemand eine Anleitung oder Empfehlungen für das Streaming von Bildern und Labels als Eingabe in Tensorflow? Ich habe viele Bilder auf einem anderen Server gespeichert und möchte diese Bilder in Tensorflow streamen, anstatt die Bilder direkt auf meinem Rechner zu speichern.Wie kann ich Daten direkt in Tensorflow streamen, anstatt Dateien auf einer Disc zu lesen?

Vielen Dank!

Antwort

5

Tensorflow hat Queues, die Streaming unterstützen, so dass Sie nicht die vollständigen Daten im Speicher laden müssen. Aber sie unterstützen nur das Lesen von Dateien auf dem gleichen Server standardmäßig. Das eigentliche Problem ist, dass Sie Daten von einem anderen Server laden möchten. Ich kann mir folgende Möglichkeiten vorstellen:

  • Zeigen Sie Ihre Bilder mit einem REST-Service an. Schreiben Sie Ihren eigenen Warteschlangenmechanismus in Python und lesen Sie diese Daten (mit Urlib oder etwas) und füttern Sie es an Tensorflow placeholders.
  • Statt Python-Warteschlangen (wie oben) können Sie auch Tensorflow-Warteschlangen verwenden (siehe answer), obwohl es etwas komplizierter ist. Der Vorteil besteht darin, dass Tensorflow-Warteschlangen mehrere Kerne verwenden können, was im Vergleich zu normalen Python-Multithread-Warteschlangen eine bessere Leistung bietet.

  • Verwenden Sie eine Netzwerkverbindung, um Ihr Betriebssystem zu glauben, dass sich die Daten auf demselben Computer befinden.

Denken Sie auch daran, wenn diese Art von verteilten Setup verwenden, werden Sie immer Netzwerk-Overhead (Zeit für die aufgenommenen Bilder von Server 1 bis 2 übertragen werden) entstehen, die Ihre Ausbildung durch eine Menge verlangsamen. Um dem entgegenzuwirken, müssen Sie einen Multithreading-Warteschlangenmechanismus mit Fetch-Execute-Überlappung erstellen, was sehr aufwändig ist. Eine einfachere Möglichkeit IMO ist es, die Daten einfach auf Ihren Trainingscomputer zu kopieren.

+0

Eine Datei zu haben ist nicht einfacher, wenn Ihr Trainingssatz nicht resident ist. – dfrankow

0

Sie können das Sockets-Paket in Python verwenden, um einen Stapel von Bildern und Beschriftungen von Ihrem Server an Ihren Host zu übertragen. Ihr Diagramm muss so definiert werden, dass ein Platzhalter als Eingabe verwendet wird. Der Platzhalter muss mit Ihrer Stapelgröße kompatibel sein.

Verwandte Themen