为防止网络过拟合,在损失函数上增加一个网络参数的正则化项是一个常用方法,下面介绍如何在Tensorflow中添加正则化项。

tensorflow中对参数使用正则项分为两步:

  • step1: 创建一个正则方法(函数/对象)
  • step2: 将这个正则方法(函数/对象),应用到参数上

下面详细介绍:

step1: 创建一个正则化方法

regularizer_l1 = tf.contrib.layers.l1_regularizer(scale, scope=None)

参数:

  • scale: 正则项的系数
  • scope: 正则化函数的命名,一般可忽略

返回:

  • regularizer_l1 : 是一个函数对象

可选择的其他正则化方法:

regularizer_l2 = tf.contrib.layers.l2_regularizer(scale, scope=None)
regularizer__sum = tf.contrib.layers.sum_regularizer(regularizer_list, scope=None)

其中,regularizer_l2中参数的定义与regularizer_l1 相同。

regularizer_sum 是一个可以执行多种(个)正则化的函数.意思是,创建一个正则化方法,这个方法是多个正则化方法的混合体.,regularizer_list是一个regularizer的列表,如

regularizer_list = [regularizer_l1,regularizer_l2]

step2: 将定义的正则方法(函数/对象),应用到参数上

             方法1:

tf.contrib.layers.apply_regularization(regularizer_l1, weights_list=None)

参数:

  • regularizer:就是我们上一步创建的正则化方法
  • weights_list: 想要执行正则化方法的参数列表,如果为None的话,就取GraphKeys.WEIGHTS中的weights.

函数返回一个标量Tensor,同时,这个标量Tensor也会保存到GraphKeys.REGULARIZATION_LOSSES中.这个Tensor保存了计算正则项损失的方法.

tensorflow中的Tensor是保存了计算这个值的路径(方法),当我们run的时候,tensorflow后端就通过路径计算出Tensor对应的值。
现在,我们只需将这个正则项损失加到我们的损失函数上就可以了.

如果是自己手动定义weight的话,需要手动将weight保存到GraphKeys.WEIGHTS中,但是如果使用layer的话,就不用这么麻烦了,别人已经帮你考虑好了.(最好自己验证一下tf.GraphKeys.WEIGHTS中是否包含了所有的weights,防止被坑)

            方法2(更常用)

在使用tf.get_variable()和tf.variable_scope()的时候,你会发现,它俩中有regularizer形参.如果传入这个参数的话,那么variable_scope内的weights的正则化损失,或者weights的正则化损失就会被添加到GraphKeys.REGULARIZATION_LOSSES中

import tensorflow as tf
from tensorflow.contrib import layers# 在tf.variable_scope()中加入regulizer
regularizer_l1 = layers.l1_regularizer(0.1)with tf.variable_scope('var1', regularizer=regularizer_l1):weight1= tf.get_variable('weight1', shape=[8])with tf.variable_scope('var2',regularizer=regularizer_l1):weight2 = tf.get_variable('weight2', shape=[8])regularization_loss = tf.reduce_sum(tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES))# 打印正则项包含的变量
print(tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES))

备注:正则化项常用于weights,而不用于bias,具体分析见:TensorFlow之四—正则化

参考:https://blog.csdn.net/liuzuoping/article/details/103821607

Tensorflow 中添加正则化项相关推荐

  1. 如何在IE右键菜单中添加菜单项(转)

    (来自:http://www.jaron.cn/chs_scripts/7/2003-11/20031125111738-101413.html) 如果使用过Netants的朋友可能都知道,NetAn ...

  2. 修改Visual Studio中“添加新项”时默认添加的命名空间

    最近要修改一个以前开发的项目,项目中并没有运用Linq,但是我在VS2008中添加新项都会自动添加Linq命名空间,每次都要手动去删除很麻烦,就想想有没有办法可以修改这个"添加新项" ...

  3. tensorflow中的正则化函数在_『TensorFlow』正则化添加方法整理

    一.基础正则化函数 tf.contrib.layers.l1_regularizer(scale, scope=None) 返回一个用来执行L1正则化的函数,函数的签名是func(weights). ...

  4. tensorflow中的正则化解决过拟合问题

    1. 正则化 所谓的过拟合问题指的是当一个模型很复杂时,它可以很好的"记忆"每一个训练数据中的随机噪音的部分而忘记了要去"学习"训练数据中通用的趋势. 为了避免 ...

  5. tensorflow中的正则化

    先看代码然后解释为什么需要正则化 import tensorflow as tf import tensorflow.contrib as contribweight=tf.constant([[1, ...

  6. 如何在Visual Studio中“添加现有项”整个目录结构?

    我有一个独立于任何C#项目的独立文件集,它们位于复杂的嵌套目录结构中. 我想以这种格式将它们添加到我正在处理的ASP.NET Web应用程序中的不同目录中; 同时保留相同的结构. 所以,我将文件夹复制 ...

  7. 分布式系统——向zabbix中添加监控项, 以nginx和mysql为例

    实验环境 server1:rhel 7.3系统--172.25.54.1 server2:rhel 6.5系统--172.25.54.11 一.zabbix监控nginx 添加监控项active se ...

  8. tensorflow中的正则化函数在_tensorflow中的正则化及数据增强

    正则化: 一般可以通过减少特征或者惩罚不重要特征的权重来缓解过拟合,但是我们通常不知道该惩罚那些特征的权重,而正则化就是帮助我们惩罚特征权重的,即特征的权重也会成为模型的损失函数一部分.可以理解为, ...

  9. android新建多个java,Java-如何在Android的警报对话框中添加多项选...

    我已经在Android应用程序中创建了"同步"菜单.当我们单击"同步"警报时,打开4个复选框的布局.我想要的是让它们起作用,例如,当我单击15分钟,然后自动取消 ...

最新文章

  1. 计算机科学和Python编程导论(三) 一些简单的数值程序
  2. 第十七届全国大学生智能车竞赛航天智慧物流创意组-第二次线上技术培训
  3. mysql总结 博客园_mysql总结
  4. avalov+require实现tab栏
  5. git fetch 和git pull 的差别
  6. axis2创建web service
  7. GUI实战|Python做一个文档图片提取软件
  8. Linux服务器上线时间,查看linux服务器时间
  9. ubuntu下搭建nfs服务器
  10. 如何识别媒体偏见_描述性语言理解,以识别文本中的潜在偏见
  11. 庄小威、陈志坚等9位科学家分享2100万美元奖金:2019年科学突破奖公布
  12. 【JAVA基础篇】反射
  13. Java入门学习思维导图
  14. getResourceAsStream 返回 null 解决经验浅谈
  15. OpenCV4每日一练day13:双目相机校正
  16. python hist2d_使用hist2d在matplotlib中创建一个对数线性图
  17. 筛选出c语言成绩前五名的记录,c语言课程论文设计成绩记录簿.doc
  18. MFC教程(Visual C++ 6.0)|合集 |更新中
  19. Android多开框架优化游戏防闪思路
  20. fastboot简介(android烧录指令)

热门文章

  1. 局域网ip冲突检测工具_“网络工程师培训”基础教程五:局域网
  2. 岑溪高考成绩查询2021,2019岑溪高考成绩喜报(归义中学、筋竹中学、南
  3. python求三个整数最大值_python 练习题:定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。...
  4. python 标准库 excel_Python 操作 Excel 的函数库
  5. 烟台大学计算机技术面试,2019烟台大学研究生复试面试注意哪些
  6. python2打印字符串_Python 3基础教程2-打印语句和字符串
  7. 最大似然估计_机器学习最大似然估计
  8. 并行程序设计导论_C程序设计导论
  9. java绝对路径和相对路径_Java文件路径,绝对路径和规范路径
  10. restful soap_Web服务面试问题– SOAP,RESTful