Tensorflow2.0之BatchNorm层

用TensorFlow 2.3搞定课程设计:8万张图片的垃圾分类数据集与完整代码分享 本文详细介绍了如何使用TensorFlow 2.3处理8万张图片的垃圾分类数据集,涵盖数据清洗、模型选型与调优、PyQt5界面开发及项目答辩技巧。通过实战案例和完整代码分享,帮助读者高效完成课程设计,提升AI应用能力。 阅读详情

Tensorflow2.0之BatchNorm层

简介:

卷积神经网络的出现,网络参数量大大减低,使得几十层的深层网络成为可能。然而,在残差网络出现之前,网络的加深使得网络训练变得非常不稳定,甚至出现网络长时间不更新甚至不收敛的现象,同时网络对超参数比较敏感,超参数的微量扰动也会导致网络的训练轨迹完全改变。

2015 年,Google 研究人员Sergey Ioffe 等提出了一种参数标准化(Normalize)的手段,并基于参数标准化设计了Batch Nomalization(简写为BatchNorm,或BN)层 [6]。BN 层的提出,使得网络的超参数的设定更加自由,比如更大的学习率、更随意的网络初始化等,同时网络的收敛速度更快,性能也更好。BN 层提出后便广泛地应用在各种深度网络模型
上,卷积层、BN 层、ReLU 层、池化层一度成为网络模型的标配单元块,通过堆叠Conv-BN-ReLU-Pooling 方式往往可以获得不错的模型性能。

为什么我们需要BN层?

考虑 Sigmoid 激活函数和它的梯度分布,如下图 10.39 所示,Sigmoid 函数在𝑥 ∈−2 2 区间的导数值在 . .2 区间分布;当𝑥 > 2 或𝑥 < −2时,Sigmoid 函数的导数变得很小,逼近于0,从而容易出现梯度弥散现象。为了避免因为输入较大或者较小而导致Sigmoid 函数出现梯度弥散现象,将函数输入𝑥标准化映射到0 附近的一段较小区间将变得非常重要,可以从图看到,通过标准化重映射后,值被映射在0 附近,此处的导数值不至于过小,从而不容易出现梯度弥散现象。这是使用标准化手段受益的一个例子。

在这里插入图片描述

我们再看另一个例子。考虑2 个输入节点的线性模型,如图 下图所示:

ℒ = 𝑎 = 𝑥1𝑤1 + 𝑥2𝑤2 + b

讨论如下2 种输入分布下的优化问题:
❑ 输入𝑥1 ∈[1,10] ,𝑥2 ∈[1,10]
❑ 输入𝑥1 ∈ [1,10],𝑥2 ∈[100,1000]

由于模型相对简单,可以绘制出2 种𝑥1、𝑥2下,函数的损失等高线图,图b是𝑥1 ∈[1,10]
、𝑥2 ∈[100,1000] 时的某条优化轨迹线示意,图©是𝑥1 ∈ [1,10]、𝑥2 ∈[1,10]
时的某条优化轨迹线示意,图中的圆环中心即为全局极值点

在这里插入图片描述
考虑到:
在这里插入图片描述
当𝑥1、𝑥2输入分布相近时, 𝜕ℒ / 𝜕𝑤1、𝜕ℒ / 𝜕𝑤2偏导数值相当,函数的优化轨迹如图 10.40©所示;当𝑥1、𝑥2输入分布差距较大时,比如𝑥1 ≪ 𝑥2,则
𝜕ℒ / 𝜕𝑤1 << 𝜕ℒ / 𝜕𝑤2
损失函数等势线在𝑤2轴更加陡峭,某条可能的优化轨迹如图 (b)所示。对比2 条优化轨迹线可以观察到,𝑥1、𝑥2分布相近时图 10.40©中收敛更加快速,优化轨迹更理想。
通过上述的2 个例子,我们能够经验性归纳出:网络层输入𝑥分布相近,并且分布在较小范围内时(如0 附近),更有利于函数的优化。那么如何保证输入𝑥的分布相近呢?数据标准化可以实现此目的,通过数据标准化操作可以将数据𝑥映射到𝑥̂:
在这里插入图片描述
其中μr、σr2\mu_r、\sigma_r^2μr​、σr2​来自统计的所有数据的均值和方差,𝜖是为防止出现除0 错误而设置的较小数
字,如1 e − 8。
在基于 Batch 的训练阶段,如何获取每个网络层所有输入的统计数据μr、σr2\mu_r、\sigma_r^2μr​、σr2​呢?考虑Batch 内部的均值𝜇𝐵和方差𝜎𝐵2:
在这里插入图片描述
可以视为近似于𝜇𝑟、𝜎𝑟2,其中𝑚为Batch 样本数。因此,在训练阶段,通过
在这里插入图片描述
标准化输入,并记录每个Batch 的统计数据𝜇𝐵、𝜎𝐵2,用于统计真实的全局μr、σr2\mu_r、\sigma_r^2μr​、σr2​。
在测试阶段,根据记录的每个Batch 的𝜇𝐵、𝜎𝐵2估计出所有训练数据的𝜇𝑟、𝜎𝑟2,按着train那个一模一样的公式进行计算将每层的输入标准化。

上述的标准化运算并没有引入额外的待优化变量,𝜇𝑟、𝜎𝑟2和𝜇𝐵、𝜎𝐵2均由统计得到,不需要参与梯度更新。实际上,为了提高BN 层的表达能力,BN 层作者引入了“scale and shift”技巧,将𝑥̂变量在此映射变换:
在这里插入图片描述
其中𝛾参数实现对标准化后的𝑥̂再次进行缩放,𝛽参数实现对标准化的𝑥̂进行平移,不同的是,𝛾、𝛽参数均由反向传播算法自动优化,实现网络层“按需”缩放平移数据的分布的目的

BN层实现

在 TensorFlow 中,通过**layers.BatchNormalization()**类可以非常方便地实现BN 层:

# 创建BN 层
layer=layers.BatchNormalization()

与全连接层、卷积层不同,BN 层的训练阶段和测试阶段的行为不同,需要通过设置training 标志位来区分训练模式还是测试模式。

以 LeNet-5 的网络模型为例,在卷积层后添加BN 层,代码如下:
network = Sequential([ # 网络容器
layers.Conv2D(6,kernel_size=3,strides=1),

# 插入BN 层
layers.BatchNormalization(),
layers.MaxPooling2D(pool_size=2,strides=2),
layers.ReLU(),
layers.Conv2D(16,kernel_size=3,strides=1),
# 插入BN 层
layers.BatchNormalization(),
layers.MaxPooling2D(pool_size=2,strides=2),
layers.ReLU(),
layers.Flatten(),
layers.Dense(120, activation='relu'),
# 此处也可以插入BN 层
layers.Dense(84, activation='relu'),
# 此处也可以插入BN 层
layers.Dense(10)
])

在训练阶段,需要设置网络的参数training=True 以区分BN 层是训练还是测试模型,代码如下:

with tf.GradientTape() as tape:
	# 插入通道维度
	x = tf.expand_dims(x,axis=3)
	# 前向计算,设置计算模式,[b, 784] => [b, 10]
	out = network(x, training=True)
	```
	在测试阶段,需要设置training=False,避免BN 层采用错误的行为,代码如下:
	
```python
for x,y in db_test: # 遍历测试集
	# 插入通道维度
	x = tf.expand_dims(x,axis=3)
	# 前向计算,测试模式
	out = network(x, training=False)
ResNet残差结构深度解析与PyTorch/TensorFlow实战搭建 本文深度解析ResNet残差结构的设计精髓,通过PyTorch和TensorFlow实战搭建ResNet-34/50模型,揭示其解决网络退化问题的数学本质。文章详细讲解BasicBlock和Bottleneck结构差异,提供完整的代码实现及调优技巧,帮助开发者掌握深度学习模型搭建的核心技术。 阅读详情

相关推荐

BatchNorm层测试出现nan的查bug之旅

BatchNorm层测试出现nan的查bug之旅 1、前言 在caffe中使用BatchNorm层很简单,只要注意一点,在训练时将use_global_states设为false,测试前向阶段将use_global_states设为true即可。在tensorflow中,其实也不难(具体可参考我的另一外博客:https://blog.csdn.net/LxDamon/article/details/108762087),稍微复杂一点点,只要注意batchnorm的mean和variance不是train

LxDamon的博客 3964

Tensorflow学习十二---Batchnorm

Tensorflow学习十二—循环神经网络

weixin_45156079的博客 1259

TensorFlow迁移学习中BatchNorm失效原因与四步修复方案

BatchNorm(批归一化)作为深度神经网络中关键的归一化技术,其核心原理是利用mini-batch统计量动态校准特征分布,从而加速训练并提升泛化能力。但在迁移学习场景下,其默认行为与小数据、小批量、领域偏移等现实约束产生严重冲突:预训练统计量僵化、动量参数失配、假冻结导致分布漂移,进而引发收敛慢、震荡大、精度低等工程问题。尤其在TensorFlow 2生态中,momentum=0.99的默认设置与PyTorch差异显著,加剧了跨框架复现困难。本文聚焦BatchNorm在迁移学习中的典型失效模式,结合mo

weixin_34235457的博客 388

tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究

笔者近来在tensorflow中使用batch_norm时,由于事先不熟悉其内部的原理,因此将其错误使用,从而出现了结果与预想不一致的结果。事后对其进行了一定的调查与研究,在此进行一些总结。 一、错误使用及结果 笔者最先使用时只是了解到了在tensorflow中tf.layers.batch_normalization这个函数,就在函数中直接将其使用,该函数中有一个参数为training,在训练阶...

huitailangyz的博客 2万+

玩转pytorch和tensorflow之(1)——batchnorm

pytorch的BatchNorm2d需要把归一化的维度放到C所在的维度,对应维度索引[0,1,2,3]中的1,所以做了一个转置,输入的形状变为BWCH,把需要归一化的维度调到1。输入的形状为[1,2,3,4],BatchNormalization中的epislon参数对应BatchNorm2d 的eps参数,这里取1e-5。输入的形状为[1,2,3,4],BatchNormalization中的epislon参数对应BatchNorm2d 的eps参数,这里取1e-5。

geastwind1的专栏 483

MTK 人工智能生态系统 <一> 简介

Neuropilot

New_Tank的博客 3498

tensorflow之BatchNorm层(BN层)

BN层介绍

weixin_57729530的博客 647

LangGraph实战训练营-从零构建AI驱动的wiki知识库

本文深入解析 LangChain 团队开源的 Deep Agents 框架核心示例——LLM Wiki,一个基于大语言模型自动构建和维护持久化知识库的生产级 AI Agent 系统。文章从项目架构、环境搭建、核心原理到实战操作全面展开:详解 CompositeBackend 组合后端与细粒度权限控制的安全设计、四种工作模式(初始化/摄取/查询/质量检查)的完整流程、LangSmith 远程沙箱的隔离执行机制,以及人机协同审核(HITL)的实践应用。

program哲学 199

【Tensorflow 大马哈鱼】tf.layers 之 dense层、dropout层、batch_normalization层、pad层

之前写的代码都是基于比较底层的API了,底层的API其实是有好处的,虽然还是调API,但是至少对于原理有小小的理解才能够写出代码。而且在实现一些新的论文或者要实现一个新的点子的时候,这时候是没有API的,因此底层的API非常有存在的必要,且必须经过这一个过程。 但是对于一个非常熟悉底层原理和经过了写底层代码这个过程的人,在有些很常见的任务上,就是用高级封装好的API就行。tf.layers就是提供...

lyb3b3b的专栏 4361

线性自抗扰控制(LADRC)系统算法框图

NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-优快云博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。提供了详细的MATLAB仿真步骤和PLC源代码链接。ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法-优快云博客。

RXXW_Dor的博客 1464

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

TensorFlow中batch norm原理,使用事项与踩坑

一、机器学习领域有个重要假设:独立同分布independent and identically distributed (i.i.d.) 在概率统计理论中,指随机过程中,任何时刻的取值都为随机变量,如果这些随机变量服从同一分布,并且互相独立,那么这些随机变量是独立同分布。如果随机变量X1和X2独立,是指X1的取值不影响X2的取值,X2的取值也不影响X1的取值且随机变量X1和X2服从同一分布,这意...

7433

医疗工具识别(手术器械计数):基于YOLOv8的智能手术器械管理系统

YOLOv8是Ultralytics公司于2023年推出的最新一代目标检测算法,相比前代YOLOv5,在精度和速度上都有显著提升。Anchor-free检测:不再使用预定义的anchor boxes,简化了检测流程更高效的骨干网络:采用CSPDarknet53作为特征提取网络多尺度特征融合:通过PANet结构实现更好的小目标检测损失函数优化:使用CIoU损失提高边界框回归精度YOLOv8提供了多种规模的模型(n/s/m/l/x),可根据实际需求在精度和速度之间进行权衡。

YOLO 480

Tensorflow2.0学习笔记(七)BatchNorm层

(1)BN的作用 从上图可以看出,Sigmoid函数在[-2,2]区间导数值在[0.1,0.25],当输入大于2或者小于2时,导数逼近于0,从而容易出现梯度弥散的现象。通过标准化后,输入值被映射在0附近区域,此处的导数不会太小,不会容易出现梯度弥散的现象。 如上图所示的损失函数等高线图可知,当x1和x2分布相近时,收敛更加快速,优化轨迹更好。 结论:通过标准化后,输入值被映射在0...

静谧、淡雅 3975

【数字IC基础】DFT(Design For Test)可测性设计

【数字IC基础】DFT(Design For Test)可测性设计

努力,加油每一天鸭~ 3467

【华为OD机试真题】3、 路灯照明问题 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

题目描述 >在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。 每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。

KJ.JK 1万+

Tensorflow2.0:卷积神经网络CNN

一 全连接网络所遇到的问题 对于一个大小为2828像素的图片来说,将他的二维向量铺平一维输入神经网络中,它就拥有784个特征,那么以该特征随意建立个神经网络模型,其示意图如下: 由于输入节点和输出节点是两两相连的关系,使得参数稠密,计算代价高,这使得全网络连接在应用上有很大的局限性。 二 什么是卷积神经网络 卷积神经网络的核心思想就是局部相关性与权值共享。 1.什么是局部相关性? 对于一个图片来...

Docpark 1707

基于Matlab的磁力计校准(附源码)

磁力计沿传感器的 X、Y 和 Z 轴检测磁场强度。精确的磁场测量对于传感器融合以及确定航向和方向至关重要。为了用于航向和方向计算,需要校准典型的低成本MEMS磁力计,以补偿环境噪声和制造缺陷。一、理想磁力计理想的三轴磁力计沿正交 X、Y 和 Z 轴测量磁场强度。在没有任何磁干扰的情况下,磁力计读数测量地球磁场。如果在传感器通过所有可能的方向旋转时进行磁力计测量,则测量值应位于球体上。球体的半径是磁场强度。要生成磁场样本,请使用对象。出于这些目的,可以安全地假设每个方向的角速度和加速度为零。

珞瑜的博客 4520

tensorflow 2.0 深度学习 (第三部分 卷积神经网络 part1)

tensorflow 2.0 深度学习(第一部分 part1) tensorflow 2.0 深度学习(第一部分 part2) tensorflow 2.0 深度学习(第一部分 part3) tensorflow 2.0 深度学习(第二部分 part1) tensorflow 2.0 深度学习(第二部分 part2) tensorflow 2.0 深度学习(第二部分 part3) te...

あずにゃん梓喵的博客 1074

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

YOLOv5-C3模块实现

提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

qq_58591730的博客 95

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

BatchNorm的理解

0、问题   机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。   思考一个问题:为什么传统的神经网络在训练开始之前,要对输入的数据做Normalization?原因在于神经网络学习过程本质上是为了学习数据的分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大

qq_36575363的博客 6531

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

YOLO v2从原理到tensorflow2复现

目录 原理篇: 一、YOLO v1回顾 二、YOLO v2介绍 代码篇 三、YOLO v2的tensorflow2实现 原理篇: 一、YOLO v1回顾 下图是YOLO v1的整体网络框架图: ●主要的检测思路: 1.首先使用CNN对输入图片提取出尺寸为S*S的特征图,特征图上每个像素点映射回原图就表示原图的1个区域,所以该特征图可以把原图分成S*S个网格区域。 ...

人生虚空 3960

TensorFlow 2.0过拟合防控四层工程体系实战

过拟合是深度学习模型泛化失败的核心表征,本质是训练系统失衡而非单纯模型复杂度问题。其原理源于训练-验证数据分布偏移、权重冗余积累与优化动态失稳;技术价值在于保障模型在线上环境的真实鲁棒性与业务指标一致性。典型应用场景涵盖金融风控、推荐系统CTR建模、IoT设备故障预测等对泛化能力敏感的工业级AI任务。本文基于TensorFlow 2.0的Eager Execution、tf.data流水线、Keras回调机制与profiler诊断能力,构建覆盖数据层免疫、架构层冗余控制、训练层动态干预、评估层真实性保障的可

张沈鹏,在路上 ... 435

Tensorflow与keras学习 (10)——原生API如何训练Batchnorm层

Tensorflow中训练Batchnorm层,训练时和推理时是不一样的,保存权重时要处理一下 1,训练 import tensorflow as tf import os from tensorflow.examples.tutorials.mnist import input_data tf.logging.set_verbosity(tf.logging.INFO) if __name__ == '__main__': mnist = input_data.read_data_set

AI知识搬运工 842

batchnorm解读

转自:https://blog.csdn.net/qq_25737169/article/details/79048516 目录 第一节:Batchnorm主要解决的问题 1.1 Internal Covariate Shift 1.2 covariate shift 第二节:Batchnorm 原理解读 第三节:Batchnorm源码解读 第四节:Batchnorm的优...

gaotihong的博客 997

TensorFlow中的批归一化(BatchNorm)作用机制剖析

批归一化通过稳定层间输入分布,显著提升神经网络训练速度与稳定性。它在训练时利用批次统计量进行标准化,并引入可学习参数保持表达能力;推理时则依赖移动平均避免对batch size的依赖。TensorFlow将其深度集成,支持融合优化与灵活部署。

weixin_42613017的博客 910
上一篇: Tensorflow2.0之LeNet-5实战
下一篇: Tensorflow2.0之深度残差网络resnet18实现
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值