Ich versuche, das Inception v3-Modell im Tensorflow für meine eigenen benutzerdefinierten Kategorien neu zu trainieren. Ich habe einige Daten heruntergeladen und in Verzeichnisse formatiert. Wenn ich renne, erzeugt das Python-Skript Engpässe für die Bilder und dann, wenn es ausgeführt wird, hat es im ersten Trainingsschritt (Schritt 0) einen kritischen Fehler, wo es versucht, mit 0 zu modulo. Es erscheint in der Funktion get_image_path beim rechnen der mod_index, der index% len (category_list) ist, also muss die category_list 0 sein, richtig?
Warum passiert das und wie kann ich das verhindern?
EDIT: Hier ist der genaue Code, den ich in docker
sehe %Vor%Fix:
Das Problem tritt auf, wenn Sie weniger Bilder in einem Ihrer Unterordner haben.
Ich hatte das gleiche Problem, wenn die Gesamtzahl der Bilder in einer bestimmten Kategorie unter 30 lag. Bitte versuchen Sie, die Anzahl der Bilder zu erhöhen, um das Problem zu beheben.
Grund:
Tensorflow versucht für jedes Label (Unterordner) 3 Kategorien von Bildern (Train, Test und Validation) zu erstellen und die Bilder basierend auf einem Wahrscheinlichkeitswert (berechnet mit dem Hash des Labelnamens) darunter zu platzieren.
Ein Bild wird nur dann in den Kategorieordner gelegt, wenn der Wahrscheinlichkeitswert kleiner als die Kategorie (Zug, Test oder Validierung) ist.
Wenn nun die Anzahl der Bilder in einem Label geringer ist (etwa 25), wird die Validierungsgröße als 10 (Standard) berechnet und der Wahrscheinlichkeitswert ist normalerweise größer als 10 und daher wird kein Bild in den Validierungssatz gelegt.
Später, wenn alle Engpässe erstellt wurden und tf versucht, die Validierungsgenauigkeit zu berechnen, wird zuerst eine schwerwiegende Protokollmeldung ausgegeben:
KRITISCH: Tensorflow: Kategorie hat keine Bilder - Validierung.
und fährt fort, den Code auszuführen und stürzt ab, während er versucht, durch die Größe der Validierungsliste zu teilen (was 0 ist).
Ich hatte das gleiche Problem beim Ausführen der retrain.py und wenn ich das Argument --model_dir falsch gesetzt habe und das Startverzeichnis im flower_photos Verzeichnis erstellt wurde.
Bitte überprüfen Sie, ob sich im Verzeichnis flower_photos Verzeichnisse befinden, in denen keine Bilder vorhanden sind.
Dies passiert, wenn Sie zu wenige Bilder haben. Wie Ashwin vorgeschlagen hat, mindestens 30 Bilder.
Auch die Namen Ihres Ordners sind wichtig. Irgendwie darf Ihr Ordnername keinen Unterstrich (_) haben
z. Diese Namen haben nicht funktioniert : dettol_bottle, dettol_soap, dove_soap, lifebuoy_bottle
Diese Namen funktionierten : dettolbottle, dettolsoap, doveesoap, lifebuoybottle
Ich habe versucht, mit meinen eigenen Bildern zu trainieren (Bilder von Hunden statt Blumen) und bin auf dasselbe Problem gestoßen.
Ich habe festgestellt, dass das Problem für mich letztlich darin bestand, dass meine Ordnernamen (Kategorienamen) nicht in der Datei "imagenet_synset_to_human_label_map.txt" vorhanden waren, die in die Anfangsdaten geladen wurde, die wir gerade ändern.
Indem ich den Namen meines Bilderordners von Bichon zu Pudel geändert habe, hat das angefangen zu arbeiten, da Pudel in der Anfangskarte ist und Bichon nicht.
Für mich wurde dieser Fehler dadurch verursacht, dass ich Ordner im Trainingsverzeichnis hatte, die keine Bilder enthielten. Ich folgte dem gleichen "Poets" -Tutorial und landete schließlich Verzeichnisse mit Unterverzeichnissen im Image-Verzeichnis. Sobald ich diese entfernte und nur Verzeichnisse mit Bildern direkt in ihnen platzierte (keine Unterordner), trat der Fehler nicht mehr auf und ich konnte mein Modell erfolgreich trainieren.
Für mich war es ein "-" in meinen Ordnernamen. In dem Moment, als ich es korrigierte, verschwand der Fehler.
Ich möchte auch meine eigene Erfahrung hinzufügen:
Keine Leerzeichen Für mich funktionierte es, wenn alle enthaltenen Ordnernamen Zeichen von A bis Z enthielten, keine Leerzeichen, keine Symbole, nichts.
ZB "Ich bin ein Ordner" ist falsch. "ImAFolder" würde jedoch funktionieren.
Wie Ashwin Patti geantwortet hat, gibt es eine Möglichkeit, dass das geteilte Verzeichnis für die Validierung keine Bilder hat, weil Bilder im ursprünglichen Etikettenverzeichnis fehlen.
Diese Erklärung wird von der Warnung unterstützt, wenn Sie versuchen, mit Beschriftungen mit weniger als 20 Bildern fortzufahren:
WARNUNG: Ordner enthält weniger als 20 Bilder, die Probleme verursachen können.
Wie Matthieu in Kommentaren sagte, schlug die vorgeschlagene Lösung vor:
%Vor%wotks für mich.
Ich frage mich, was die Nachricht "Kritisch: Tensorflow: Kategorie hat keine Bilder - Validierung" bedeutet wirklich. Bezieht sich dies auf den Fehler, der behoben wurde, oder könnte dies zu einem Genauigkeitsverlust führen? Ich meine, wenn nur wenige Bilder verwendet wurden, wären die Ergebnisse nicht wie erwartet?
Tags und Links python tensorflow machine-learning