tensorflow之BatchNorm层(BN层)

本文探讨了深度学习中BatchNorm的作用,包括如何通过标准化解决Sigmoid函数的梯度弥散问题,以及BN层在训练和测试模式下的工作原理。通过实例展示了BN层如何影响模型收敛速度和稳定性。

一、前言

随着深度学习的发展,为了探索是否层数越多预测越准确,学者们进行了诸多实验,最后发现当层数到达某个值时期预测精度不升反降。而后,BatchNorm出现在一定程度解决了这个问题。

在使用Sigmoid函数后,其在x∈[-2,2]的区间的导数在[0.1,0.25]区间,这就容易在梯度更新的过程中出现梯度弥散的现象,而在进行BatchNorm后,函数值会分布在0附近,且梯度不至于过小,从而在一定程度上解决了梯度弥散的问题。

如上图,较之未标准化的权值,右图(标准化)收敛更加迅速,且优化路径更加理性。

二、BN层

对每个channel求mean和std,再进行标准化,使其分布在0-1区间。其还有一个缩放因子γ,位移因子β

在训练模式下:

1. 前向传播的mean和std会向真实数据的mean和std靠近

2. 反向传播会对β和γ进行更新

在测试模式下上述参数不变

BN默认:

axix=-1(对channel进行)

center=true >>β参数

### Batch Normalization 在深度学习中的作用 Batch Normalization (BN) 是一种用于深度神经网络的技术,旨在通过规范化每一的输入来改善网络训练过程。这种技术能够减少内部协变量偏移(Internal Covariate Shift),从而加快模型收敛速度并提高性能[^1]。 #### BN 的核心作用 BN 的主要功能在于调整和缩放每一批数据的分布特性,使得网络各的输入更加稳定。具体来说,它通过对每一批数据进行标准化处理,使激活函数的输入接近零均值单位方差的标准正态分布。这一操作有助于缓解梯度消失问题以及加速模型训练进程[^3]。 另外,在实际应用中发现,引入 BN 不仅能增强模型鲁棒性还能起到一定正则化效果,进而提升测试阶段的表现水平[^2]。 ### TensorFlow 中如何实现 Batch Normalization 以下是基于 TensorFlow 2.x 版本的一个简单例子展示怎样向卷积神经网络添加 batch normalization: ```python import tensorflow as tf from tensorflow.keras import layers, models model = models.Sequential([ layers.Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)), layers.BatchNormalization(), # 添加batch norm在这里 layers.MaxPooling2D(pool_size=(2, 2)), layers.Flatten(), layers.Dense(64, activation='relu'), layers.BatchNormalization(), # 可以加到全连接之后也是同样道理 layers.Dropout(0.5), layers.Dense(10, activation='softmax') ]) ``` 上述代码片段展示了如何利用 Keras API 构建含 BN 的 CNN 结构。值得注意的是 `layers.BatchNormalization()` 这一行即代表插入了一个批量归一化的操作步骤。 ### 总结 综上所述,Batch Normalization 对于现代深架构而言至关重要,因为它不仅促进了更快更稳定的优化流程而且可能带来额外的一般化优势。因此,在设计复杂的人工智能解决方案时考虑加入此类组件往往是非常有益处的做法。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值