2016-06-16 34 views
0

Ich frage mich, wie man l1 oder l2 Regularisierung innerhalb eines LSTM in TensorFlow implementieren kann? TF gibt dir keinen Zugriff auf die internen Gewichte des LSTM, also bin ich mir nicht sicher, wie man die Normen berechnen und dem Verlust hinzufügen kann. Meine Verlustfunktion ist nur RMS für jetzt.Tensorflow LSTM Regularisierung

Die Antworten here scheinen nicht zu genügen.

Antwort

1

Die Antworten in dem von Ihnen erwähnten Link sind die richtige Vorgehensweise. Iterieren Sie durch tf.trainable_variables und finden Sie die mit Ihrem LSTM verbundenen Variablen.

Ein alternativerer, komplizierterer und möglicherweise spröderer Ansatz besteht darin, das variable_scope des LSTM erneut einzugeben, reuse_variables = True zu setzen und get_variable() aufzurufen. Aber die ursprüngliche Lösung ist schneller und weniger spröde.

0

TL; DR; Speichern Sie alle Parameter in einer Liste, und fügen ihre L^n Norm zur Zielfunktion vor Gradienten zu machen für die Optimierung

1) In der Funktion, wo man den Schluss definieren

net = [v for v in tf.trainable_variables()] 
return *, net 

2) Fügen Sie den L^n Norm in den Kosten und berechnen den Gradienten von den Kosten

weight_reg = tf.add_n([0.001 * tf.nn.l2_loss(var) for var in net]) #L2 

cost = Your original objective w/o regulariser + weight_reg 

param_gradients = tf.gradients(cost, net) 

optimiser = tf.train.AdamOptimizer(0.001).apply_gradients(zip(param_gradients, net)) 

3) Führen Sie den Optimiser, wenn Sie über

wollen
_ = sess.run(optimiser, feed_dict={input_var: data}) 
Verwandte Themen