我想知道如何在TensorFlow中的LSTM中实现l1或l2正则化? TF不允许您访问LSTM的内部权重,因此我不确定如何计算规范并将其添加到损失中。我的损失功能现在只是RMS。
答案here似乎不够。
答案 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})