当前位置: 首页 > 知识库问答 >
问题:

Keras/TensorFlow批次标准化正在标准化什么

牟辰龙
2023-03-14

我的问题是批处理规范化(BN)正在规范化什么。

我在问,BN是单独标准化每个像素的通道还是一起标准化所有像素的通道。它是在每张图像的基础上还是在整个批次的所有通道上进行的。

具体而言,BN在X上运行。比如说,X.shape=[m,h,w,c]。因此,当轴=3时,它在“c”维度上运行,即通道数(对于rgb)或特征图数。

因此,假设X是rgb,因此有3个通道。BN是否做到了以下几点:(这是BN的简化版本,用于讨论维度方面。我知道gamma和beta是学习过的,但这里并不关心。)

对于m中的每个图像=X:

  1. 对于每个像素(h, w)取相关r, g的平均值,

在keras中,BatchNormize的文档说:

轴:整数,应规格化的轴(通常是特征轴)。

例如,在具有数据格式为“通道优先”的Conv2D层之后,在批标准化中设置轴=1。

但是它在每个维度上到底做了什么?

共有1个答案

壤驷麒
2023-03-14

首先,有几种方法可以应用批处理规范化,这些方法甚至在原始论文中专门针对卷积神经网络提到。请参阅本问题中的讨论,其中概述了普通和卷积BN之间的区别,以及两种方法都有意义的原因。

特别是keras.layers.BatchNormize实现了卷积BN,这意味着对于输入[m, h, w, c]它计算c均值和跨m*h*w值的标准偏差。运行平均值、运行std dev和gamma和beta变量的形状只是(c,)。跨空间维度(像素)以及跨批次的值是共享的。

因此,更精确的算法是:对于每个R、G和B通道,计算该通道中所有像素和所有图像的平均值/方差,并应用归一化。

 类似资料:
  • 问题内容: 在tensorflow 1.4中,我发现了两个执行批处理规范化的函数,它们看起来相同: (链接) (链接) 我应该使用哪个功能?哪一个更稳定? 问题答案: 只是添加到列表中,还有其他几种方法可以在tensorflow中进行批处理规范: 是低级操作。调用者负责自己处理和张量。 是另一个低级操作,类似于上一个操作。不同之处在于它针对4D输入张量进行了优化,这在卷积神经网络中很常见。接受任何

  • 本文向大家介绍什么是数据标准化,为什么要进行数据标准化?相关面试题,主要包含被问及什么是数据标准化,为什么要进行数据标准化?时的应答技巧和注意事项,需要的朋友参考一下 数据标准化是预处理步骤,将数据标准化到一个特定的范围能够在反向传播中保证更好的收敛。一般来说,是将该值将去平均值后再除以标准差。如果不进行数据标准化,有些特征(值很大)将会对损失函数影响更大(就算这个特别大的特征只是改变了1%,但是

  • 前端标准化 本篇文章主要讲解什么是前后端分离,为什么要做前后端分离,还包括如何将前端工程化、前端编码约定、如何进行写RESTFul资源接口。 我们将前端分成两个工程: 1) WEB工程:主要提供RESTFul资源接口。 2) HTML工程:主要H5和JS,实现前端MVC分层,实现多端的能力。 前端标准化目标:代码可维护、可重构,组件化、可扩展【多端】

  • 问题内容: 在ICU项目(也现在有一个PHP库)中包含有需要帮助恢复正常UTF-8串类,使搜索时更容易地比较值。 但是,我试图弄清楚这对应用程序意味着什么。例如,在哪种情况下,我想要“规范对等”而不是“兼容性对等”,反之亦然? 问题答案: 规范化归一化 Unicode包括多种编码某些字符(最著名的是重音字符)的方法。规范化规范将代码点更改为规范编码形式。生成的代码点应与原始代码点相同,除非字体或渲

  • [source] BatchNormalization keras.layers.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer=