问题标签 [batch-normalization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
207895 浏览

python - 我在哪里调用 Keras 中的 BatchNormalization 函数?

如果我想在 Keras 中使用 BatchNormalization 函数,那我只需要在开始时调用一次吗?

我为此阅读了此文档:http: //keras.io/layers/normalization/

我不知道我应该在哪里称呼它。下面是我尝试使用它的代码:

我问是因为如果我使用包括批处理规范化的第二行运行代码,并且如果我在没有第二行的情况下运行代码,我会得到类似的输出。因此,要么我没有在正确的位置调用该函数,要么我想它并没有太大的区别。

0 投票
4 回答
45075 浏览

machine-learning - 卷积神经网络中的批量归一化

我是卷积神经网络的新手,只知道特征图以及如何对图像进行卷积以提取特征。我很高兴知道在 CNN 中应用批量标准化的一些细节。

我阅读了这篇论文https://arxiv.org/pdf/1502.03167v3.pdf并且可以理解应用于数据的 BN 算法,但最后他们提到在应用于 CNN 时需要稍作修改:

对于卷积层,我们还希望归一化遵循卷积特性——以便同一特征图的不同元素在不同位置以相同的方式进行归一化。为了实现这一点,我们在一个小批量中联合标准化所有位置的所有激活。在阿尔格。在图 1 中,我们让 B 是一个特征图中所有值的集合,该集合跨越小批量的元素和空间位置——因此对于大小为 m 的小批量和大小为 p × q 的特征图,我们使用 effec - 大小为 m' = |B| 的小批量 = m·pq。我们为每个特征图学习一对参数 γ(k) 和 β(k),而不是每次激活。阿尔格。图 2 进行了类似的修改,因此在推理过程中,BN 变换将相同的线性变换应用于给定特征图中的每个激活。

当他们说“以便同一特征图的不同元素在不同位置以相同方式归一化”时,我完全感到困惑

我知道特征图的含义,不同的元素是每个特征图中的权重。但我不明白位置或空间位置是什么意思。

我根本无法理解下面的句子 “在算法 1 中,我们让 B 成为特征图中跨小批量元素和空间位置的所有值的集合”

如果有人冷淡地用更简单的术语详细说明并解释我,我会很高兴

0 投票
2 回答
13016 浏览

machine-learning - caffe中应该如何使用“BatchNorm”层?

我对如何"BatchNorm"在模型中使用/插入层有点困惑。
我看到了几种不同的方法,例如:

ResNets"BatchNorm"+ "Scale"(无参数共享)

"BatchNorm"layer 紧随其后的是"Scale"layer:

cifar10 示例:仅"BatchNorm"

在 caffe 提供的 cifar10 示例中,"BatchNorm"使用时没有任何"Scale"后续:

cifar10和_ batch_norm_param_TRAINTEST

batch_norm_param: use_global_scaleTRAIN在和TEST阶段之间改变:

那么它应该是什么?

"BatchNorm"应该如何在 caffe 中使用层?

0 投票
1 回答
7559 浏览

python - 在 TensorFlow 中使用 3D 卷积进行批量归一化

我正在实现一个依赖 3D 卷积的模型(用于类似于动作识别的任务),并且我想使用批量标准化(参见[Ioffe & Szegedy 2015])。我找不到任何专注于 3D convs 的教程,因此我在这里做了一个简短的教程,我想和你一起回顾一下。

下面的代码引用了 TensorFlow r0.12,它明确地实例化了变量——我的意思是我没有使用 tf.contrib.learn,除了 tf.contrib.layers.batch_norm() 函数。我这样做既是为了更好地理解事情是如何在幕后工作的,也是为了获得更多的实施自由(例如,变量摘要)。

我将通过首先为全连接层编写示例,然后为 2D 卷积,最后为 3D 情况编写示例,从而顺利进入 3D 卷积情况。在浏览代码时,如果您可以检查一切是否正确完成,那就太好了 - 代码运行,但我不能 100% 确定我应用批处理规范化的方式。我以一个更详细的问题结束这篇文章。

全连接(FC)案例

2D卷积(CNN)层案例

3D卷积(CNN3D)层案例

我想确定的是,上面的代码是否完全按照[Ioffe & Szegedy 2015]在 Sec. 3.2:

对于卷积层,我们还希望归一化遵循卷积特性——以便同一特征图的不同元素在不同位置以相同的方式进行归一化。为了实现这一点,我们在一个小批量中联合标准化所有位置的所有激活。[...]阿尔格。图 2 进行了类似的修改,因此在推理过程中,BN 变换将相同的线性变换应用于给定特征图中的每个激活。

更新 我猜上面的代码对于 3D conv 案例也是正确的。事实上,当我定义我的模型时,如果我打印所有可训练变量,我也会看到预期的 beta 和 gamma 变量数量。例如:

这对我来说看起来不错,因为由于 BN,为每个特征图(总共 256 个)学习了一对 beta 和 gamma。


[Ioffe & Szegedy 2015]:批量标准化:通过减少内部协变量偏移来加速深度网络训练

0 投票
2 回答
14998 浏览

keras - 与 BatchNormalization 层关联的参数数量是 2048?

我有以下代码。

这是模型摘要:

BatchNormalization (BN) 层的输入大小为 512。根据 Keras文档,BN 层的输出形状与输入相同,即 512。

那么BN层关联的参数个数怎么是2048呢?

0 投票
1 回答
4586 浏览

testing - Tensorflow batch_norm 在测试时无法正常工作(is_training=False)

我正在训练以下模型:

在哪里

这里定义了 inception_V3 。我的模型训练得很好,损失从 60 到小于 1。但是当我想在另一个文件中测试模型时:

它给了我毫无意义的结果,或者更准确地说,损失是1e-8针对所有训练和测试样本的。当我更改is_training=True它时,它会给出更多合乎逻辑的结果,但损失仍然大于训练阶段(即使我正在测试训练数据)我对 VGG16 也有同样的问题。当我使用没有 batch_norm 的 VGG 时,我的测试准确度为 %100,而当我使用 batch_norm 时,准确度为 0%。

我在这里想念什么?谢谢,

0 投票
1 回答
3519 浏览

keras - 如何设置批量标准化层的权重?

如何设置 Keras 的批量标准化层的权重?

我对文档有点困惑

weights:初始化权重。2 个 Numpy 数组的列表,形状为:[(input_shape,), (input_shape,)] 请注意,此列表的顺序为 [gamma, beta, mean, std]

我们需要所有四个 [gamma, beta, mean, std] 吗?有没有办法只使用 [gamma, beta] 来设置权重?

0 投票
1 回答
184 浏览

tensorflow - Tensorflow 中的体积批量标准化

Torch 在链接 中提供的体积批量标准化的 tensorflow 等效项是什么nn.VolumetricBatchNormalization

我目前正在使用:

这是维度输入的正确使用方式(batch_size,height,width,depth,channels)吗?

0 投票
1 回答
1953 浏览

tensorflow - TensorFlow - 批量归一化回归失败?

我正在使用 TensorFlow 解决多目标回归问题。具体来说,在具有逐像素标记的卷积网络中,输入是图像,标签是“热图”,其中每个像素都有一个浮点值。更具体地说,每个像素的地面实况标记的下限为零,虽然在技术上没有上限,但通常不会大于 1e-2。

如果没有批量归一化,网络能够给出合理的热图预测。通过批量归一化,网络需要很长时间才能达到合理的损失值,而它所做的最好的事情就是使每个像素都成为平均值。这是使用tf.contrib.layers conv2dandbatch_norm方法,并batch_norm传递给conv2d's normalization_fn(或者在没有批量标准化的情况下不传递)。我曾在另一个(单值)回归网络上短暂尝试过批量标准化,但当时也遇到了麻烦(尽管我没有进行广泛的测试)。一般来说,在回归问题上使用批量标准化有问题吗?有没有通用的解决方案?

如果不是,可能是什么原因导致此类应用程序的批量标准化失败?我尝试了各种初始化、学习率等。我希望最后一层(当然不使用批量标准化)可以使用权重将倒数第二层的输出缩放到适当的回归值。做不到这一点,我从该层删除了批处理规范,但没有任何改进。我尝试了一个使用批量归一化的小分类问题,并没有发现任何问题,所以这似乎是合理的,这可能是由于回归问题的性质造成的,但我不知道这如何会导致如此巨大的差异。是否已知批量标准化在回归问题上存在问题?

0 投票
0 回答
436 浏览

python - 共享层的 Keras 批量标准化

在以前的 keras 版本中,我使用批处理规范化参数 mode=2 在我的网络中使用共享模块。升级此参数后不再存在,当我使用批量标准化时,网络似乎没有学习。