数据的批标准化

本篇主要讲述什么是标准化,为什么要标准化,以及如何进行标准化(添加BN层)。

1.什么是标准化

  传统机器学习中标准化也叫做归一化。

  一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位(说白了就是让数据尽可能处于某个范围内)。

  数据标准化让机器学习模型看到的不同样本彼此之间更加相似,这有助于模型的学习与对新数据的泛化。

  常见的数据标准化形式:

     标准化:

    将数据减去其平均值使其中心值为0,然后将数据除以其标准差使其标准差为1。

    归一化:

    将数据减去最小值除以最大时,使取值范围压缩到0~1之间。

   批标准化:

  Batch Normalization(BN),批标准化

   和普通的数据标准化类似,是将分散的数据统一的一种做法,也是优化神经网络的一种方法。

   不仅在数据输入之前对数据做标准化,在网络模型的每一次变换之后都应该考虑数据的标准化。

   即使在训练过程中,均值和方差随着时间发生变化,它也可以适应性的将数据标准化。

2.为什么要做批标准化

   批标准化解决的问题是梯度消失梯度爆炸

   批标准化是一种训练优化方法

  梯度消失与梯度爆炸:

    对于激活函数,之前一直使用Sigmoid函数,其函数图像成一个S型,如下所示,它会使得输出在[0, 1]之间:

 
    如果我们输入的数据在0附近左右均匀分布,x的变化就会引起y的正常变化,就是一个正常的梯度变化。
   但是,当数据全部非常大,或者非常小的时候,x上的变化几乎不会引起y的变化,训练的速度就会非常缓慢,且效果差,这种情况就称为梯度消失。同理,在其他的激活函数中,也会出现数据范围导致的梯度异常激增,x上的微小变化就会导致y的剧烈变化,从而影响训练效果,这种情况称之为梯度爆炸。

  批标准化的好处:

  数据预处理可以加速收敛,同理,在神经网络中使用批标准化也可以加速收敛,而且还有更多的优点。

  1.具有正则化的效果(抑制过拟合)。

  2.提高模型泛化能力。

  3.允许更高的学习率从而加速收敛。

  4.批标准化有助于梯度的传播,因此能够使用更深的网络进行训练。对于特别深的神经网络,只有包含多个Batch Normalization(BN)层才能进行训练。

3.tensorflow实现批标准化

  Batch Normalization通常在卷积层或者全连接层之后使用(原始论文中一般是应用于卷积层或全连接层之后,在激活函数之前。但是,实际上放在激活函数之后效果可能更好)。

  使用tf.keras.layers.Batchnormalization()来实现。

  tf.keras.layers.Batchnormalization()不仅可以处理训练数据的均值和方差,也可以在预测时,根据训练数据均值和方差的期望值对测试数据进行处理。

  代码: 

1 model.add(tf.keras.layers.Conv2D(64, (3, 3)))
2 model.add(tf.keras.layers.BatchNormalization())
3 model.add(tf.keras.layers.Activation('relu'))
4 #两种BN层插入方式
5 model.add(tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu'))
6 model.add(tf.keras.layers.BatchNormalization())

最新文章

  1. USB通信协议——深入理解
  2. jetbrains产品激活方式(WebStorm,Pycharm有效)
  3. 查看Android应用包名package和入口activity名称
  4. 常见IE浏览器bug及其修复方案(双外边距、3像素偏移、绝对定位)
  5. golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法
  6. 基于 IdentityServer3 实现 OAuth 2.0 授权服务数据持久化
  7. PLI与Pillow
  8. xargs 参数
  9. Tomcat 常规配置并通过zabbix 监控 jvm状态
  10. 浏览器标题栏添加小logo图片,记录一下,方便以后用
  11. keepalived问题
  12. mysql中varchar和char区别(思维导图整理)
  13. Android微信登录、分享、支付
  14. 在页面加载后在设置embed 的src 怎么实现?
  15. jQuery中删除方法empty(),remove()和detach()的区别
  16. 51-python3 pandas读写excel
  17. MSSQL-sql server-视图简介
  18. MySQL服务使用
  19. elasticsearch 安装 windows linux macOS
  20. Oracle 通过触发器实现ID自增

热门文章

  1. [BUUOJ记录] [BJDCTF 2nd]fake google
  2. ElasticSearch7.6.1 概述
  3. kali linux 开启ssh服务
  4. Java高并发系列——检视阅读
  5. Ubuntu修改默认Python版本,你了解多少~
  6. Fragment时长统计那些事
  7. 【NOIP2014模拟】高级打字机
  8. USB URB的status及其代表的意义
  9. [LeetCode]Sql系列2
  10. redis之哨兵部署运行日志解读