ich tun das Folgende, aber das einzige, was ich weiß, ist, dass einige Parameter nicht mit L2, wie Batch-Norm-Parameter und Verzerrungen regularisiert werden. LSTMs enthält einen Bias-Tensor (trotz konzeptioneller Überlegungen hat es viele Verzerrungen, sie scheinen verkettet zu sein oder etwas für die Performance), und für die Batch-Normalisierung füge ich "noreg" in den Variablennamen ein, um es ebenfalls zu ignorieren.
loss = your regular output loss
l2 = lambda_l2_reg * sum(
tf.nn.l2_loss(tf_var)
for tf_var in tf.trainable_variables()
if not ("noreg" in tf_var.name or "Bias" in tf_var.name)
)
loss += l2
Wo lambda_l2_reg
der kleine Multiplikator ist, zum Beispiel: float(0.005)
Doing diese Auswahl (die die volle if
in der Schleife ist zu verwerfen einige Variablen in der Regularisierung) einmal mir von 0.879 F1 Punktzahl springen gemacht 0.890 in einem Schuss der Code zu testen, ohne den Wert der Konfig lambda
, gut dies war einschließlich der Änderungen für die Batch-Normalisierung und die Biases und ich hatte andere Vorurteile im neuronalen Netzwerk.
Nach this paper kann die Regularisierung der wiederkehrenden Gewichtungen mit explodierenden Gradienten helfen.
Auch, nach this other paper, würde Dropout besser zwischen gestapelten Zellen und nicht innerhalb von Zellen verwendet werden, wenn Sie einige verwenden.
Über das Problem des explodierenden Gradienten, wenn Sie Gradienten-Clipping mit dem Verlust verwenden, dem die L2-Regularisierung bereits hinzugefügt wurde, wird diese Regularisierung auch während des Clipping-Prozesses berücksichtigt.
P.S. Hier ist das neurale Netzwerk, an dem ich gerade arbeitete: https://github.com/guillaume-chevalier/HAR-stacked-residual-bidir-LSTMs
Ich habe einen ganzen Prozess als Antwort auf Ihre Frage gestellt. Chk aus https://stackoverflow.com/questions/37869744/tensorflow-lstm-regularization/46761296#46761296 – sdr2002