前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tensorflow实战(4)-TensorFlow的正则化实现

Tensorflow实战(4)-TensorFlow的正则化实现

作者头像
YoungTimes
发布2022-04-28 13:00:26
6940
发布2022-04-28 13:00:26
举报

在训练深度学习网络时,在损失函数上加上正则项是防止过拟合的一个重要方法。本文介绍两种在TensorFlow中如何加入正则化项的方法, 但无论何种方法大的逻辑都是:创建一个正则化方法;然后将这个正则化方法应用到变量上。

第一种方法:

这种方法对应与tf.get_variable初始化变量的方法。

步骤一:创建正则化方法:

代码语言:javascript
复制
regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)

scale对应Loss函数中的\alphaα, 增加正则化的目标函数如下:

其中\alpha \in [0, \infty)α∈[0,∞)是权衡范数惩罚项\OmegaΩ和标准目标函数J(\theta; X, y)J(θ;X,y)相对贡献的超参数。\alpha = 0α=0表示没有正则化,\alphaα越大,对应的正则化惩罚越大。

步骤二: 将正则化的方法应用到变量上

代码语言:javascript
复制
weights = tf.get_variable(
        name="weights",
        regularizer=l2_reg,
        ...
    )

步骤三: 定义加入了正则化惩罚项的目标函数

代码语言:javascript
复制
reg_variables = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
loss += tf.add_n(reg_variables)

第二种方法

这种方法对应与tf.Variable初始化变量的方法。

步骤一: 创建一个变量

代码语言:javascript
复制
W = tf.Variable(tf.random_normal([128, 100, 100, 3]))

步骤二: 将该变量加入tf.GraphKeys.WEIGHTS集合

代码语言:javascript
复制
tf.add_to_collection(tf.GraphKeys.WEIGHTS, W)

步骤三: 对tf.GraphKeys.WEIGHTS集合中所有变量进行正则化并求和,加入loss

代码语言:javascript
复制
regularizer = tf.contrib.layers.l2_regularizer(scale)
reg_term = tf.contrib.layers.apply_regularization(regularizer)

loss = loss + reg_term

tf.contrib.layers.apply_regularization(regularizer, weights_list=None)函数其实有两个参数,第一个是正则化方法,第二个是想要执行正则化方法的变量列表,如果为None,则默认取tf.GraphKeys.WEIGHTS中的weight。当然也可以加入别的集合,只要在函数中指明要正则化的变量集合名字即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 半杯茶的小酒杯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一种方法:
  • 第二种方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档