Tensorflow LSTM正规化

时间:2016-06-16 21:37:28

标签: tensorflow lstm

我想知道如何在TensorFlow中的LSTM中实现l1或l2正则化? TF不允许您访问LSTM的内部权重,因此我不确定如何计算规范并将其添加到损失中。我的损失功能现在只是RMS。

答案here似乎不够。

2 个答案:

答案 0 :(得分:1)

您提到的链接中的答案是正确的方法。迭代tf.trainable_variables并找到与LSTM相关的变量。

另一种更复杂且可能更脆弱的方法是重新输入LSTM的variable_scope,设置reuse_variables = True,并调用get_variable()。但实际上,原始解决方案更快,更不易碎。

答案 1 :(得分:1)

TL; DR;将所有参数保存在列表中,并在进行优化渐变之前将其L ^ n范数添加到目标函数

1)在定义推理的函数

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

2)在成本中添加L ^ n范数,并从成本

计算梯度
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)通过

运行优化器
_ = sess.run(optimiser, feed_dict={input_var: data})