2016-11-30 4 views
0

Ich bin ein Programm mit Tensorflow Bildklassifizierung bauen. Ich habe tensorflow von Github, und was ich weiß, ist ziemlich, wie man classify_image.py läuft!Retrain tensorflow Modell für zusätzliche Kategorien

Was ich tun möchte, ist eine Option, das Modell auf einfache Weise zu trainieren. Zum Beispiel, das Modell kennt "Schlüssel", aber ich möchte es für "HouseKeys" trainieren, die einen schicken Schlüsselanhänger oder so etwas haben. Gibt es eine Art Skript, mit dem ich sagen kann "nimm diese 20 Bilder und lerne HouseKeys", damit das Model "Schlüssel" von "HouseKeys" unterscheiden kann?

Entschuldigung meine nooblines, und danke im voraus!

Edit: Offensichtlich ist es sehr wichtig, dass das Modell seine Kenntnisse über alle anderen Kategorien behält, die es vorher kannte, da nur "HouseKeys" zu erkennen, absolut nutzlos ist.

Antwort

1

Sie können dies tun. Es wird jedoch wahrscheinlich einige Anpassungen benötigen.

Ich weiß nicht genau das Skript, auf das Sie sich beziehen, aber ich gehe davon aus, dass Sie mindestens zwei Python-Dateien haben. Der eine ist das eigentliche neuronale Netzwerk und der andere behandelt Training und Evaluation.

Das erste, was Sie tun müssen, ist sicherzustellen, dass das neuronale Netzwerk mit neuen Klassen umgehen kann. Suchen Sie nach etwas wie folgt aus:

input_y = tf.placeholder(tf.float32, [None, classes], name="input_y") 

Ein großer Teil der Zeit, wenn Sie Tensoren sehen, dessen Name enthält x (input_x zum Beispiel) sie auf die Daten beziehen, die Trainingseingabe.

Tensoren mit y in ihrem Namen, wie im obigen Beispiel, beziehen sich normalerweise auf die Beschriftungen.

Der obige Code sagt input_y ein Tensor (man denke Array für den Augenblick) vom Typ float32, mit variabler Länge (None von [None, classes]), aber mit jedem Element der Dimension classes.

Wenn classes war 3, input_y könnte wie folgt aussehen:

[[0, 0, 1], [1, 0, 0], [0, 1, 0]] 

Nur gut, es könnte wie folgt aussehen:

[[0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 1, 0], [0, 0, 1]] 

Obwohl die Länge variieren können, müssen wir immer als elements a size 3 (classes) Was die Bedeutung betrifft, bedeutet [0, 0, 1] zum Beispiel, dass dies ein Label für Klasse 2 ist, weil wir 1 bei Index 2 haben (suche nach einer heißen Notation).

Der Punkt ist, ein neuronales Netzwerk mit dieser Art von Eingang kann bis zu 3 Klassen lernen. Jedem Eingang für den Tensor x ist ein Label vom Tensor y zugeordnet, und die Labels y können entweder 0, 1 oder 2 in einer heißen Notation sein.

Mit so etwas können Sie beispielsweise "keys", "HouseKeys" und "CarKeys" lernen, aber Sie können beispielsweise keine "OfficeKeys" hinzufügen.

Also, ersten Schritt ist sicherzustellen, dass Ihr Netzwerk die maximale Anzahl von Etiketten lernen kann, die Sie wollen.

Es muss nicht alle auf einmal lernen. Dies bringt uns zu Punkt 2:

Werfen Sie einen Blick here. Dies ist die Dokumentation für die Tensorflow Saver-Klasse. Dadurch können Sie Modelle speichern und laden.

Für Ihr Problem bedeutet dies, das Modell auf einem 2-Klassen-Datensatz zu trainieren, es zu speichern, einen 3-Klassen-Datensatz zu generieren, das zuvor gespeicherte Modell zu laden und den neuen Datensatz zu trainieren. Es wird das gleiche "Wissen" (Gewichte) wie das Modell, das Sie gespeichert haben, aber es wird beginnen, sie an die dritte Klasse anzupassen.

Aber dafür müssen Sie sicherstellen, dass das Netzwerk von Anfang an 3 Klassen handhaben kann.

Hoffe, das hilft!

Verwandte Themen