文章目录

  • dropout
  • BN

dropout

dropout可以看成是正则化,也可以看成是ensemble

class Dropout(SubLayer):# self._prob:训练过程中每个神经元被“留下”的概率def __init__(self, parent, shape, drop_prob=0.5):if drop_prob < 0 or drop_prob >= 1:raise ValueError("(Dropout) Probability of Dropout should be a positive float smaller than 1")SubLayer.__init__(self, parent, shape)# 被“留下”的概率自然是1-被Drop的概率self._prob = tf.constant(1-drop_prob, dtype=tf.float32)self.description = "(Drop prob: {})".format(drop_prob)def _activate(self, x, predict):# 如果是在训练过程,那么就按照设定的、被“留下”的概率进行Dropoutif not predict:return tf.nn.dropout(x, self._prop)  # 如果是在预测过程,那么直接返回输入值即可return x

BN

简单地将每层得到的数据进行上述归一化操作显然是不可行的、因为这样会破坏掉每层自身学到的数据特征。为了使得中心化之后不破坏 Layer 本身学到的特征、BN 采取了一个简单却十分有效的方法:引入两个可以学习的“重构参数”以期望能够从中心化的数据重构出 Layer 本身学到的特征。

class Normalize(SubLayer):"""初始化结构self._eps:记录增强数值稳定性所用的小值的属性self._activation:记录自身的激活函数的属性,主要是为了兼容图7.17 A的情况self.tf_rm、self.tf_rv:记录μ_run、σ_run^2的属性self.tf_gamma、self.tf_beta:记录γ、β的属性self._momentum:记录动量值m的属性"""def __init__(self, parent, shape, activation="Identical", eps=1e-8, momentum=0.9):SubLayer.__init__(self, parent, shape)self._eps = epsself._activation = activationself.tf_rm = self.tf_rv = Noneself.tf_gamma = tf.Variable(tf.ones(self.shape[1]), name="norm_scale")self.tf_beta = tf.Variable(tf.zeros(self.shape[1]), name="norm_beta")self._momentum = momentumself.description = "(eps:{}, momentum:{})".format(eps, momentum)def _activate(self, x, predict):if self.tf_rm is None or self.tf_rv is None:shape = x.get_shape()[-1]self.tf_rm = tf.Variable(tf.zeros(shape), trainable=False, name="norm_mean")self.tf_rv = tf.Variable(tf.ones(shape), trainable=False, name="norm_var")if not predict:# tf.nn.moments获取原始的均值和误差_sm, _sv = tf.nn.moments(x, list(range(len(x.get_shape())-1)))# 定义操作,方便控制依赖_rm = tf.assign(self.tf_rm, self._momentum*self.tf_rm + (1-self._momentum)*_sm)_rv = tf.assign(self.tf_rv, self._momentum*self.tf_rv + (1-self._momentum)*_sv)with tf.control_dependencies([_rm, _rv]):# 按照算法描述,momentum版本应该必须使用动量更新后的均值和误差
#                _norm = tf.nn.batch_normalization(x, _sm, _sv, self.tf_beta, self.tf_gamma, self._eps)_norm = tf.nn.batch_normalization(x, self.tf_rm, self.tf_rv, self.tf_beta, self.tf_gamma, self._eps)else:_norm = tf.nn.batch_normalization(x, self.tf_rm, self.tf_rv, self.tf_beta, self.tf_gamma, self._eps)# 如果指定了激活函数、就再用相应激活函数作用在BN结果上以得到最终结果# 这里只定义了ReLU和Sigmoid两种,如有需要可以很方便地进行拓展if self._activation == "ReLU":return tf.nn.relu(_norm)if self._activation == "Sigmoid":return tf.nn.sigmoid(_norm)return _norm

深度学习:dropout和BN的实现相关推荐

  1. 深度学习Dropout技术分析

    深度学习Dropout技术分析 什么是Dropout? dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机 ...

  2. 深度学习- Dropout 稀疏化原理解析

    搬运原文链接:https://zhuanlan.zhihu.com/p/38200980 深度学习中 Dropout 原理解析 文章目录 深度学习中 Dropout 原理解析 1. Dropout 简 ...

  3. 深度学习中的 BN (BatchNormalization)理解

    CNN 三大算子: CONV + BN +RELU 1.为什么 BN 指导思想: 机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的. 具有统一规格的数据, ...

  4. cvpr 深度估计_干货 | 2019 到目前为止的深度学习研究进展汇总

    本文为 AI 研习社编译的技术博客,原标题 : Best Deep Learning Research of 2019 So Far 作者 | ODSC - Open Data Science 翻译 ...

  5. 深度学习论文TOP10,2019一季度研究进展大盘点

    鱼羊 编译整理 量子位 报道 | 公众号 QbitAI 9012年已经悄悄过去了1/3. 过去的100多天里,在深度学习领域,每天都有大量的新论文产生.所以深度学习研究在2019年开了怎样一个头呢? ...

  6. 人工智能、机器学习、深度学习从入门到进阶学习资料整理

    最近整理了下在这里分享给大家,欢迎大家点赞收藏. 学习社区 神力AI(MANA):国内最大的AI代码平台. Learn AI:一个AI学习交流中心. AI研习社:一个专注于AI开发者和学术青年求知求职 ...

  7. 机器学习、深度学习、神经网络学习资料集合(开发必备)

    最近整理了下AI方面的学习资料,包含了学习社区.入门教程.汲取学习.深度学习.自然语言处理.计算机视觉.数据分析.面试和书籍等方面的知识.在这里分享给大家,欢迎大家点赞收藏. 学习社区 神力AI(MA ...

  8. 高屋建瓴学机器学习/深度学习

    高屋建瓴 问 总结 通过高屋建瓴的学习,解决平时越到的一些本质上的疑惑. 问 到底该如何理解 Normalization,以及深度学习中的BN? 详解深度学习中的Normalization,BN/LN ...

  9. 人工智能、机器学习、深度学习学习资料整理(开发必备)

    最近整理了下AI方面的学习资料,包含了学习社区.入门教程.汲取学习.深度学习.自然语言处理.计算机视觉.数据分析.面试和书籍等方面的知识.在这里分享给大家,欢迎大家点赞收藏. 学习社区 神力AI(MA ...

  10. 李宏毅深度学习自用笔记(未完)

    文章目录 1.机器学习是干什么的? 1.机器学习能够找到那些函数? 1.如何告诉机器我们希望找到什么函数? 1.机器如何找到我们想要的函数? 1.机器学习的三个步骤: 2.线性回归模型 2.梯度下降 ...

最新文章

  1. ECharts开源图表使用方法简单介绍
  2. numpy np.sum()函数(求给定轴上的数组元素的总和)(与ndarray.sum()函数等价)
  3. 数据处理算法链接 DATA MINING GA LINK
  4. mysql编程_PHP数据库编程之一MySQL优化策略概述
  5. 计算机科技专业前景,美国伊利诺伊理工大学
  6. ios知识点扩充(1)
  7. MySQL int类型的显示
  8. OSPF的多域配置-要点总结
  9. 上拉加载更多即ion-content遇上slideBox的时候
  10. 网络语言y c,惊为天人!当网络流行语翻译成诗词,中文歌曲翻译成英文......
  11. 老年程序员的出路何在
  12. TensorFlow2.0 Guide官方教程 学习笔记17 -‘Using the SavedModel format‘
  13. (小米系统系列四)小米/红米手机获取root根目录权限
  14. 也来谈谈“为什么中国的程序员总被称为码农?”
  15. 微信小程序 text 标签小技巧
  16. wifi热点共享android上网 网关 静态ip,公共WIFI热点无线上网 - 几种Wifi无线网络上网方式及其组建方法...
  17. kaldi运行cvte开源chain模型
  18. 窥探Flutter的前世今身
  19. 内网沟通软件都有哪些?
  20. 阿里云HaaS“老板来了”用的ESP-EYE语音唤醒+人脸识别介绍

热门文章

  1. linux redhate7 yum源,更换Red Hat Enterprise Linux 7 64位的yum为centos的版本
  2. shell 压测_【原】shell编写一个简单的jmeter自动化压测脚本
  3. python 获取第一个key_Python中常见的9大坑,看看你有没有遇到
  4. vue项目中的遇错:Invalid Host header
  5. springboot 禁用 cookie / chrome 禁用 cookie
  6. 【Zabbix】yum方式安装zabbix
  7. python函数对变量的作用域_python函数变量作用域如何理解使用?
  8. python struct模块_python struct 模块
  9. 企业办公自动化系统_办公自动化怎么理解?如何实现?
  10. conda切换环境_Python多环境管理,你需要知道的几种方法