L2正则化的TnesorFlow实现

TensorFlow实现L2正则化

转自:https://zhuanlan.zhihu.com/p/29297934

TensorFlow的最优化方法tf.train.GradientDescentOptimizer包办了梯度下降、反向传播,所以基于TensorFlow实现L2正则化,并不能按照上节的算法直接干预权重的更新,而要使用TensorFlow方式:

tf.add_to_collection(tf.GraphKeys.WEIGHTS, W_2)

tf.add_to_collection(tf.GraphKeys.WEIGHTS, W_3)

regularizer = tf.contrib.layers.l2_regularizer(scale=5.0/50000)

reg_term = tf.contrib.layers.apply_regularization(regularizer)


loss = (tf.reduce_mean(

tf.nn.sigmoid_cross_entropy_with_logits(labels=y_,

logits=z_3)) + reg_term)


对上述代码的一些说明:

  • 将网络中所有层中的权重,依次通过tf.add_to_collectio加入到tf.GraphKeys.WEIGHTS中;
  • 调用tf.contrib.layers.l2_regularizer生成L2正则化方法,注意所传参数scale=λ/n(n为训练样本的数量);
  • 调用tf.contrib.layers.apply_regularization来生成损失函数的L2正则化项reg_term,所传第一个参数为上面生成的正则化方法,第二个参数为none时默认值为tf.GraphKeys.WEIGHTS;

  • 最后将L2正则化reg_term项追加到损失函数表达式;

猜你喜欢

转载自blog.csdn.net/oliverchrist/article/details/79659094
今日推荐