tensorflow实现L2正则化的方法总结

前言:

l2正则化通常是指在损失函数后面添加一个额外的l2正则化项,又称l2范数(l2范数:定义为向量中所有元素的平方和的开平方)。目的是为了防止网络过拟合。

l2正则化防止过拟合的原理可以参考这篇博客https://blog.csdn.net/PanYHHH/article/details/107180364

tensorflow中计算l2正则化项的方法有tf.nn.l2_loss()tf.contrib.layers.l2_regularizer(),使用示例如下

import tensorflow as tf

weights = tf.constant([[1,2,3], [4,5,6]], dtype=tf.float32)
sess = tf.InteractiveSession()
# 计算的是所有元素的平方和再除以2
print(tf.nn.l2_loss(weights).eval())
# 等价于
print(tf.contrib.layers.l2_regularizer(1.)(weights).eval())
# output: 45.5

接下来将介绍两种方法将l2正则化项添加到损失函数后:

一、遍历trainable variables添加L2正则化项:

1.遍历可训练参数,将每个参数传入tf.nn.l2_loss()进行计算并相加起来;

2.乘以weight_decay并与base_loss相加。

weight_decay = 0.001

base_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits))
l2_loss = weight_decay * tf.add_n([tf.nn.l2_loss(tf.cast(v, tf.float32)) for v in tf.trainable_variables()])
loss = base_loss + l2_loss

注意:该过程对每个trainable variable都进行了l2正则化,包括权值w和偏置b。有种说法是如果对偏执b进行l2正则化将会导致欠拟合,一般只需要对权值w进行正则化,所以来看第二种方法。

二、在构造网络层时传入l2正则化函数:

如下所示,在构造网络层时,将'kernel_initializer'参数设为l2正则化函数,则tensorflow会将该权重变量(卷积核)的l2正则化项加入到集合 tf.GraphKeys.REGULARIZATOIN_LOSSES里。

x = tf.layers.conv2d(x, 512, (3, 3),
                             padding='same',
                             activation=tf.nn.relu,
                             kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),
                             kernel_regularizer=tf.contrib.layers.l2_regularizer(0.001)

在计算loss时使用tf.get_collection()来获取tf.GraphKeys.REGULARIZATOIN_LOSSES集合,然后相加即可:

base_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits))
l2_loss = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
loss = tf.add_n([base_loss] + l2_loss, name="loss")

欢迎补充指正。

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值