lubię robić następujące, ale jedyne co wiem to to, że niektóre parametry wolą nie być regulowane za pomocą L2, takie jak parametry norm wsadowych i błędy. LSTMs zawiera jeden tensor Bias (mimo, że koncepcyjnie ma on wiele błędów, wydaje się być połączony lub coś, dla wydajności), a dla normalizacji wsadowej dodaję "noreg" w nazwie zmiennej, aby ją zignorować.
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
Gdzie lambda_l2_reg
jest mały mnożnik, np: float(0.005)
Spowoduje to zaznaczenie (który jest pełen if
w pętli odrzucając pewne zmienne w regularyzacji) raz uczynił mnie skakać od 0,879 punktów F1 0.890 w jednym ujęciu testowania kodu bez zmiany wartości konfiguracji lambda
, to było uwzględnianie zarówno zmian dla normalizacji serii i Biases i miałem inne błędy w sieci neuronowej.
Według regulowanie nawracających wag może pomóc w wybuchaniu gradientów.
Ponadto, zgodnie z this other paper, dropout byłby lepiej używany między komórkami stosu, a nie wewnątrz komórki, jeśli używasz niektórych.
Jeśli chodzi o problem z eksplozją gradientu, jeśli korzystasz z przycinania gradientowego z utratą, która ma już dodaną regulację L2, to regularyzacja będzie również brana pod uwagę podczas procesu obcinania.
P.S. Oto sieć neuronowa, nad którą pracowałem: https://github.com/guillaume-chevalier/HAR-stacked-residual-bidir-LSTMs
Przekazałem cały proces jako odpowiedź na twoje pytanie. Chk out https://stackoverflow.com/questions/37869744/tensorflow-lstm-regularization/46761296#46761296 – sdr2002