2017-05-08 5 views
0

Kürzlich überlege ich, ein angepasstes neuronales Netzwerk zu erstellen. Die grundlegende Struktur ist die gleiche wie gewöhnlich, während ich die Verbindungen zwischen den Ebenen abschneiden möchte. Zum Beispiel, wenn ich ein Netzwerk mit zwei versteckten Ebenen konstruiere, möchte ich einige Gewichte löschen und die anderen behalten, wie das Bild unten: Structure of customized neural networks Sorry, ich kann Bilder hier nicht einbetten, nur Links.Reparieren einer Teilmenge Gewichte im Neuronalen Netzwerk während des Trainings

Dies ist kein Dropout, um Überanpassung zu vermeiden. Tatsächlich sind die verbleibenden Gewichte (Verbindungen) spezifiziert und festgelegt. Die entsprechende Struktur ist absichtlich angelegt.

Gibt es irgendwelche Möglichkeiten in Python, es zu tun? Tensorflow, Pytorch, Theano oder andere Module?

Antwort

0

Ja, Sie können dies in Tensorflow tun.

Sie würden eine Schicht in Ihrem tensorflow Code so etwas wie so haben:

m = tf.Variable([width,height] , dtype=tf.float32 )) 
b = tf.Variable([height] , dtype=tf.float32 )) 
h = tf.sigmoid(tf.matmul(x,m) + b) 

Was Sie wollen, einige neue Matrix ist, machen wir es für Kill k nennen. Es wird spezifische neurale Verbindungen töten. Die neuralen Verbindungen sind in m definiert. Dies wäre Ihre neue Konfiguration

k = tf.Constant(kill_matrix , dtype=tf.float32) 
m = tf.Variable([width,height] , dtype=tf.float32 ) 
b = tf.Variable([height] , dtype=tf.float32 ) 
h = tf.sigmoid(tf.matmul(x, tf.multiply(m,k)) + b) 

Ihre kill_matrix ist eine Matrix von 1 und 0. Fügen Sie eine 1 für jede neurale Verbindung ein, die Sie behalten möchten, und eine 0 für jede, die Sie töten möchten.

+0

Danke. Die Tötungsmatrix sieht gut aus. Es inspiriert mich. Ich werde es versuchen. – Yuan

+0

darf ich eine andere Frage stellen? Wird diese Änderung den Optimierer beeinflussen, wie Adam? Soweit ich weiß, verwenden wir backpropagation, um die Gewichte zu aktualisieren. Jetzt kürzen wir die Verbindung, wird die Backpropagation die getöteten Gewichte aktualisieren, was keinen Einfluss auf den Feed-Forward-Prozess hat. Oder ich kann diesen Vorgang interpretieren, da die Aktualisierung stattfindet, aber keine Auswirkungen auf die Vorwärtsverarbeitung hat. – Yuan

+0

Als nächstes sollte der * Kill-Layer * statt dessen zur besseren Übersicht als * Gate-Layer * oder * Suppress-Layer * bezeichnet werden. Um Ihre Frage zu Adam (oder einem anderen Optimierer) zu beantworten, lautet die Antwort: ** Dies wirkt sich nicht negativ auf den Optimierer aus **. Die * Unterdrückungsschicht * unterdrückt sowohl den Feedforward- als auch den Backpropagation-Schritt unter Verwendung der unterdrückten (oder ** abgetöteten **) Verbindungen. – Wontonimo

Verwandte Themen