2017-06-27 2 views
0

Ich habe in letzter Zeit viel Torch-Code durchgespielt. Ich habe bemerkt, in der Regel nach dem Modell aufgebaut ist, es geklont wird, wie in der folgenden Code:Warum klonen sie das gesamte Modell vor dem Fackeltraining?

siamese_1=siamese_1:cuda() 
parameters,gradParameters = siamese_1:getParameters() 
siamese_2=siamese_1:clone('weight','bias','gradWeight','gradBias') 
siamese_net:add(siamese_1) 
siamese_net:add(siamese_2) 

siamese_1 ein konstruiertes Modell zu sein.

Es ist schwer zu verstehen, warum dies getan wird?

Dieser Code dient zur Feinabstimmung über Netzwerke. Ist von der this Repository (Zeile 122 bis 126).

Antwort

1

Wenn Sie ein Modell klonen und einige zusätzliche Argumente angeben (wie 'weight usw.), teilt das neue Modell diese Parameter mit denen des ursprünglichen Modells. In diesem Fall teilen sich die Modelle siamese_1 und siamese_2 ihre Gewichte, Verzerrungen und die entsprechenden Gradienten.

In dem Code, den Sie betrachten, möchten die Autoren ein Netzwerk mit zwei parallelen Netzwerken erstellen, die ihre Gewichtungen teilen. Dies ist der Grund, warum sie die clone-Funktion verwenden.

+0

In diesem Code ist die Netzwerkparallelität bereits oberhalb der genannten Zeilen erfolgt. Ich verstehe, dass die Parameter auf ein anderes Modul geklont werden ('siamesisch_2'), aber warum wird dann' siamesisch_1' auch zu 'siamesisch_net' hinzugefügt? – deepdebugging

+0

nein, die Linien 122 bis 126 tun die Parallelität. 'siamese_net' ist eine' ParallelTable' und folglich müssen Sie diesem Netzwerk mindestens 2 Module (parallel) hinzufügen. Deshalb fügen Sie sowohl 'siamesisch_1' als auch' siamesisch_2' hinzu, die folglich im 'siamesischen_netz' parallel geschaltet werden. – fonfonx

+0

Richtig, auch ich habe herausgefunden, dass die parallelen Netzwerke benötigt werden, weil diese Implementierung versucht, gleichzeitig zwei Datentensoren zu passieren. – deepdebugging

Verwandte Themen