Tensorflow CNN Trainingsbilder sind alle unterschiedlich groß

8

Ich habe ein Deep Convolution Neuronales Netzwerk erstellt, um einzelne Pixel in einem Bild zu klassifizieren. Meine Trainingsdaten haben immer die gleiche Größe (32x32x7), aber meine Testdaten können beliebig groß sein.

Github-Repository

Momentan funktioniert mein Modell nur bei Bildern gleicher Größe. Ich habe das Tensorflow-Mnist Tutorium ausführlich verwendet, um mir bei der Konstruktion meines Modells zu helfen. In diesem Tutorial verwenden wir nur 28x28 Bilder. Wie wird das folgende Mnist-Modell geändert, um Bilder jeder Größe zu akzeptieren?

%Vor%

Um die Dinge etwas komplizierter zu machen, hat mein Modell Faltungen umgesetzt, in denen die Ausgabeform angegeben werden muss. Wie würde ich die folgende Codezeile anpassen, sodass die Transpose-Faltung eine Form mit der gleichen Größe der Eingabe ausgibt.

%Vor%     
Devin Haslam 21.12.2017, 17:00
quelle

3 Antworten

4

Leider gibt es keine Möglichkeit, dynamische Grafiken in Tensorflow zu erstellen (Sie könnten es mit falten versuchen, aber das liegt außerhalb des Bereichs der Frage) . Damit haben Sie zwei Möglichkeiten:

  1. Bucketting: Sie erstellen mehrere Eingabetensoren in wenigen handverlesenen Größen und wählen dann in Runtime den richtigen Bucket (siehe Beispiel). In jedem Fall benötigen Sie wahrscheinlich die zweite Option. Seq2seq mit Bucketing

  2. Ändern Sie die Größe der Eingabe- und Ausgabebilder. Unter der Annahme, dass alle Bilder das gleiche Seitenverhältnis beibehalten, können Sie versuchen, das Bild vor der Inferenz zu skalieren. Nicht sicher, warum Sie sich für die Ausgabe interessieren, da MNIST eine Klassifizierungsaufgabe ist.

In beiden Fällen können Sie den gleichen Ansatz verwenden:

%Vor%     
gidim 31.12.2017, 02:00
quelle
0

Der von Ihnen erwähnte Mnist-Modellcode ist ein Beispiel, das FC-Netzwerke und nicht Faltungsnetzwerke verwendet. Die Eingabeform von [None, 784] wird für die Mistgröße (28 x 28) angegeben. Das Beispiel ist ein FC-Netzwerk mit fester Eingabegröße.

Was Sie fordern, ist in FC-Netzwerken nicht möglich, da die Anzahl der Gewichte und Abweichungen von der Eingabeform abhängig ist. Dies ist möglich, wenn Sie eine Fully-Convolution-Architektur verwenden. Also mein Vorschlag ist, eine voll-Faltung-Architektur zu verwenden, so dass die Gewichte und Verzerrungen nicht von der Eingabeform abhängig sind

    
Abhijit Balaji 04.01.2018 10:48
quelle
0

Wenn Sie @ gidims Antwort hinzufügen, können Sie hier die Größe der Bilder in Tensorflow ändern und die Ergebnisse direkt an die Feeds weiterleiten deine Schlussfolgerung. Hinweis: Bei dieser Methode wird das Bild skaliert und verzerrt, wodurch sich Ihr Verlust erhöhen kann.

Der ganze Kredit geht an Prasad Pais Artikel über Datenerhöhung .

%Vor%     
RafazZ 05.01.2018 22:34
quelle