mi piace fare ciò che segue, tuttavia, l'unica cosa che so è che alcuni parametri preferiscono non essere regolarizzati con L2, come i parametri e i bias della norma batch. LSTM contiene un tensore Bias (nonostante concettualmente ha molti bias, sembrano concatenati o qualcosa, per le prestazioni), e per la normalizzazione del lotto aggiungo "noreg" nel nome delle variabili per ignorarlo anch'io.
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
Dove lambda_l2_reg
è il piccolo moltiplicatore, ad esempio: float(0.005)
Facendo questa selezione (che è la piena if
nel circuito scartando alcune variabili nella regolarizzazione) una volta mi ha fatto saltare da 0,879 punteggio F1 a 0,890 in un colpo di test del codice senza riaggiustare il valore di lambda
della config, beh questo includeva sia le modifiche per la normalizzazione batch che i Bias e io avevo altri pregiudizi nella rete neurale.
In base a this paper, la regolarizzazione dei pesi ricorrenti può aiutare con i gradienti di esplosione.
Inoltre, in base a this other paper, il dropout sarebbe meglio utilizzato tra le celle impilate e non all'interno delle celle se ne si utilizza un po '.
Informazioni sul problema del gradiente di esplosione, se si utilizza il ritaglio sfumato con la perdita a cui è già stata aggiunta la regolarizzazione L2, tale regolarizzazione verrà presa in considerazione anche durante il processo di ritaglio.
P.S. Ecco la rete neurale su cui stavo lavorando: https://github.com/guillaume-chevalier/HAR-stacked-residual-bidir-LSTMs
fonte
2017-01-23 05:51:32
Ho messo un intero processo come risposta alla tua domanda. Chk out https://stackoverflow.com/questions/37869744/tensorflow-lstm-regularization/46761296#46761296 – sdr2002