给损失函数加正则化项

减小过拟合途径

(1)增大数据集;
(2)减少变量个数,去掉不重要变量;
(3)正则化:保留所有变量,但减小特征变量的数量级。这种处理方法更合适,因为实际所有变量对结果都有一定贡献,只是有些变量对结果的影响很小。
正规化背后的思路:这些参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此 就不易发生过拟合的问题。

给损失函数加正则化项

给损失函数加上正则化项可防止模型过拟合。正则化方法有两种:

(1)L1正则化:

使用L1正则化的模型又叫做Lasso Regularization(Lasso回归),直接在原来的损失函数基础上加上权重参数的绝对值的倍数,如公式1所示:
给损失函数加正则化项_第1张图片

(2)L2正则化

使用L2正则化的模型又叫做岭回归(ridge regression),直接在原来的损失函数基础上加上权重参数的平方的倍数,如公式2所示:
给损失函数加正则化项_第2张图片
lasso 可以用来做 feature selection,而 ridge 不行。或者说,lasso 更容易使得权重变为 0,而 ridge 更容易使得权重接近 0。(具体可参考这篇文章:https://blog.csdn.net/red_stone1/article/details/80755144)

TensorFlow中正则化的实现

TensorFlow中对相应参数进行正则化的函数如下:
tf.contrib.layers.l1_regularizer(regularizer)(w) (L1正则化)
tf.contrib.layers.l2_regularizer(regularizer)(w) (L2正则化)
以上两个参数往往配合tf.add_to_collection()和tf.add_n()两个函数使用,如下所示:
tf.add_to_collection(‘losses’, tf.contrib.layers.l1_regularizer(regularizer)(w))或
tf.add_to_collection(‘losses’, tf.contrib.layers.l2_regularizer(regularizer)(w))
其中,tf.add_to_collection(“list_name”, element),函数有两个参数,分别是列表名和元素,其作用是将元素element添加到list_name所指的列表中。
而tf.add_n(list_name)函数有一个参数,即列表名,其作用是将列表元素相加并返回。
因此,得到损失函数中正则化项的语句包括以下(以L2正则化为例):
tf.add_to_collection(‘losses’, tf.contrib.layers.l2_regularizer(regularizer)(w))
L2_err=tf.add_n(losses)
loss=cem或其它损失函数+L2_err

你可能感兴趣的:(TensorFlow,计算机视觉)