2017-05-31 2 views
0

Ich habe ein tiefes Netzwerk von vollständig verbundenen Schichten mit schlanken erstellt. Ich würde gerne das Netzwerk schrittweise trainieren - zuerst die erste Schicht optimieren, dann die zweite und so weiter. Lesen, ich sehe, dass dies mit tf.stop_gradient getan werden könnte, obwohl, wie man dies nicht klar ist. Vielleicht ist ein besserer Weg, die trainierbare Flagge in der Slim-Call zu verwenden - einfach alle außer der ersten Ebene falsch zu setzen. Unglücklicherweise würde dies erfordern, dass aufeinanderfolgende Schichten im Verlauf des Trainings allmählich auf "Wahr" gesetzt werden, wodurch sich der Graph ändert. Nicht sicher, ob das legal ist.Freeze Teile des neuronalen Netzes in Tensorflow

Meine Fragen: - sind diese vernünftigen Ansätze für das, was ich tun möchte? - kann jemand vorschlagen, wie jeder Ansatz zu implementieren?

+0

Ich hatte eine [allgemeinere Version] (https://stackoverflow.com/questions/43681295/enable-and-di Sable-Learning-of-a-Variable-während-Training) dieser Frage, noch keine Antwort. Hoffentlich erleichtert die Tatsache, dass Sie Ihr Problem auf ein progressives, schichtweises Lernen beschränken, eine Lösung. – user1735003

Antwort

0

Die gemeinsame Nutzung so etwas wie dieses:

optimizer = tf.train.GradientDescentOptimizer(learning_rate) 
train_op = optimizer.minimize(loss_function) 

Jetzt können Sie minimize einen anderen Parameter liefern, die var_list ist, dass Sie eine Liste von Variablen, die Sie ändern, um möchten Ihre loss_fuction zu minimieren.

So können Sie nur eine Teilmenge aller Ihrer Variablen optimieren, das heißt, den Rest einfrieren.

Angenommen, Sie haben ein Diagramm und möchten zuerst eine Ebene und dann eine weitere Ebene optimieren. Dann können Sie so etwas wie folgt verwenden:

optimizer = tf.train.GradientDescentOptimizer(learning_rate) 
train_op1 = optimizer.minimize(loss_function, var_list=<list of first layer variables>) 
train_op2 = optimizer.minimize(loss_function, var_list=<list of second layer variables>) 

Und dann, in Ihrer Laufphase, werden Sie train_op1 und train_op2 nach Ihren Optimierungsplan (zB eine Schleife auf der ersten Schicht und dann eine Schleife auf dem zweiten Lauf Schicht)

(PS Keine verhindert, dass Sie zwei unterschiedliche Verlustfunktionen für die erste Schicht nur verwenden und dann für beide Schichten. In diesem Fall

der Optimierer nur in Bezug auf diese Variablen minimieren wird die loss_function abhängt.)
+0

Das sieht interessant aus ... Ich werde es so schnell wie möglich versuchen. –

Verwandte Themen