7

Gibt es einen einfachen Weg (z. B. ohne den Code zu ändern), um Wights aus mehreren vortrainierten Netzwerken in ein Netzwerk zu laden? Das Netzwerk enthält einige Layer mit denselben Dimensionen und Namen wie die beiden vortrainierten Netzwerke.Mehrere vortrainierte Netzwerke in Caffe

Ich versuche dies mit NVidia DIGITS und Caffe zu erreichen.

EDIT: Ich dachte, es wäre nicht möglich, es direkt von DIGITS zu tun, wie durch Antworten bestätigt. Kann jemand eine einfache Möglichkeit vorschlagen, den DIGITS-Code zu ändern, um mehrere vortrainierte Netzwerke auswählen zu können? Ich überprüfte den Code ein wenig und dachte, dass die training script ein guter Anfang wäre, aber ich habe keine gründliche Kenntnis von Caffe, also bin ich mir nicht sicher, was der beste/schnellste Weg wäre, dies zu erreichen.

Antwort

6

Wie Shai vorgeschlagen hat, gab es keine Möglichkeit, dies zu tun, also beschloss ich, das offizielle Repository zu klonen und die entsprechenden Änderungen vorzunehmen. Ich habe den Code so geändert, dass mehrere vortrainierte Netzwerke geladen werden können, indem ein Doppelpunkt als Trennzeichen verwendet wird.

Ich habe eine Pull-Anfrage auf dem offiziellen Repository erstellt und meine Änderungen wurden dann mit dem Hauptzweig von DIGITS zusammengeführt, was bedeutet, dass es jetzt möglich ist, diese Funktionalität in DIGITS zu verwenden.

+0

haben Sie eine ähnliche Pull-Anfrage an das BVLC/caffe-Repository gestellt? – Shai

+0

Sie können dies mit 'caffe' tun, indem Sie den Parameter' --weights' verwenden, der verschiedene Netzwerke durch Kommas trennt. –

2

AFAIK gibt es keine direkte Möglichkeit, dies zu tun.
Sie können jedoch net surgery verwenden, um die vortrainierten Modelle zu laden und ihre Gewichte manuell dem Zielnetz zuzuweisen. Sobald Sie ein einzelnes Netz mit allen Gewichten haben, die gemäß den verschiedenen vortrainierten Modellen initialisiert wurden, können Sie es speichern und als ein vortrainiertes Modell für den Rest Ihrer Arbeit verwenden.

+1

So wird's gemacht ... ein NN-Modell ist nur ein Haufen Gewichte, also müssen Sie es nur kopieren und speichern. Viel Glück aber ... wenn Sie Layer aus verschiedenen Netzen kopieren, können sie nicht gut zusammenspielen. Und Ziffern sind ziemlich hoch ... Sie müssen in Python oder C++ fallen, um es zu erledigen. – user1269942

+0

Gibt es eine einfache Möglichkeit, dies in den DIGITS-Code zu integrieren (ich habe die Frage bearbeitet)? –

+0

@IgorŠevo, wenn Sie diesen Trick viele Male versuchen, können Sie in Erwägung ziehen, das Trainingsskript von DIGITS zu ändern. Ich denke jedoch, wenn Sie dies nur ein oder zwei Mal tun, tun Sie es besser manuell mit "Netz-Chirurgie". – Shai