tensorflow 给非get_variable()获得的变量加L2正则化

今天在做一个涉及RNN的项目的时候,想给RNN内部的变量加上L2正则化,但是RNNcell和DynamicRNN都没有regularizer这个参数,用variable_scope的regularizer参数又会报一个很奇怪的不在一个frame的错误。

于是另辟蹊径,使用tf.trainable_variables方法。

  1. 首先,用tf.trainable_variables()得到所有weights和bias,
  2. 然后,用tf.nn.l2_loss()计算L2 norm,
  3. 求和之后作为正则项加给原来的cost function
tv = tf.trainable_variables()#得到所有可以训练的参数,即所有trainable=True 的tf.Variable/tf.get_variable
regularization_cost = 0.001* tf.reduce_sum([ tf.nn.l2_loss(v) for v in tv ]) #0.001是lambda超参数
cost = original_cost_function + regularization_cost
optimizer = tf.train.AdamOptimizer(learning_rate = 0.01).minimize(cost)

 

 

参考资料:

https://blog.csdn.net/u012223913/article/details/78270501

https://blog.csdn.net/UESTC_C2_403/article/details/72356448

posted @ 2018-10-11 19:41  大胖子球花  阅读(731)  评论(0)    收藏  举报