问题标签 [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 投票
3 回答
2409 浏览

tensorflow - 使用同步方式和变量实现多 GPU BN 层的方法

我想知道在使用多 GPU 进行训练时,通过同步批量统计信息来实现批量标准化层的可能方法。

Caffe也许有一些 caffe 的变体可以做,比如link。但是对于BN层,我的理解是它仍然只同步层的输出,而不是means和vars。也许 MPI 可以同步手段和变量,但我认为 MPI 有点难以实现。

Torch我在这里这里看到了一些评论,显示 running_mean 和 running_var 可以同步,但我认为 batch mean 和 batch var 不能或难以同步。

Tensorflow正常情况下和 caffe 和 torch 是一样的。BN的实现就是指这个。我知道 tensorflow 可以将操作分发到tf.device(). 但是means和vars的计算是在BN层的中间,所以如果我在cpu中收集means和vars,我的代码会是这样的:

这仅适用于一个 BN 层。为了在 cpu 中收集统计信息,我必须破坏代码。如果我有超过 100 个 BN 层,那会很麻烦。

我不是这些库的专家,所以可能存在一些误解,请随时指出我的错误。

我不太关心训练速度。我正在做图像分割,这会消耗大量 GPU 内存,而 BN 需要合理的批量大小(例如大于 16)才能获得稳定的统计信息。所以使用多GPU是不可避免的。在我看来,tensorflow 可能是最好的选择,但我无法解决破解代码问题。与其他图书馆的解决方案也将受到欢迎。

0 投票
0 回答
1089 浏览

validation - 使用批量归一化时的噪声验证损失(与 epoch 相比)

我在 Keras 中使用以下模型:

输入/conv1/conv2/maxpool/conv3/conv4/maxpool/conv5/conv6/maxpool/FC1/FC2/FC3/softmax(2个节点)。

当我在每次激活 (Wx) 之后和非线性 ReLu(Wx) 之前使用 Batch Normalization 时,验证的损失和准确性是嘈杂的(Red=Training_set / Blue=validation_set):

图 1- 与 BN。

如果我移除 BN 层,那么验证损失与训练损失一样平滑图2

我尝试了以下方法(但没有奏效):

1. 将批量大小从 64 增加到 256 2. 降低学习率 3. 添加 L2-reg 和/或不同幅度的 dropout 4. 训练/验证拆分率:20%、30%。仅供参考,数据集是 kaggle 猫狗图像。

0 投票
1 回答
2196 浏览

python - 使用带有 tensorflow 的 BatchNorm 层训练 Keras 模型

我正在使用keras构建模型,并在tensorflow中编写优化代码和所有其他代码。当我使用像DenseConv2D这样非常简单的层时,一切都很简单。但是在我的 keras 模型中添加BatchNormalization层会使问题变得复杂。

由于BatchNormalization层在训练阶段和测试阶段的行为不同,我发现我的 feed_dict 需要K.learning_phase ( ):True。但是以下代码运行不正常。它运行没有错误,但模型的性能并没有变得更好。

当我尝试使用 keras fit函数训练 keras 模型时,效果很好。

我应该怎么做才能在tensorflow中使用BatchNormalization层训练keras模型?

0 投票
1 回答
12676 浏览

batch-normalization - tf.layers.batch_normalization 大测试错误

我正在尝试使用批量标准化。我尝试在 mnist 的简单 conv 网络上使用 tf.layers.batch_normalization。

我的训练步精度很高(>98%),但测试精度很低(<50%)。我尝试更改动量值(我尝试了 0.8、0.9、0.99、0.999)并尝试使用批量大小,但它的行为基本相同。我在 20k 次迭代中训练它。

我的代码

我认为问题在于moving_mean/var 没有被更新。我在运行期间打印了moving_mean/var,我得到:移动方差是:[1.1.1.1.1.1.]移动平均值是:[0.0.0.0.0.0.]伽玛是:[-0.00055969 0.00164391 0.00163301 -0.00206227 -0.00011434 -0.00070161] 贝塔是:[-0.00232835 -0.00040769 0.00114277 -0.0025414 -0.00215596]

有人知道我在做什么错吗?

0 投票
1 回答
1866 浏览

python-2.7 - 批量标准化中的维度

我正在尝试在Tensorflow中构建一个通用的批量标准化函数。

我在这篇文章中学习了批量标准化,我觉得这很友好。

我对比例beta变量的维度有疑问:在我的情况下,批量标准化应用于每个卷积层的每个激活,因此,如果我将卷积层的输出作为大小为:

我需要比例beta与卷积层输出具有相同的维度,对吗?

这是我的功能,程序可以工作,但我不知道是否正确

0 投票
1 回答
93 浏览

tensorflow - 张量流中没有精确的批量标准化实现,为什么?

在推理阶段通过批量归一化精确完成的是使用总体均值和估计的总体方差对每一层进行归一化 在此处输入图像描述

但似乎每个 tensorflow 实现(包括这个和官方的 tensorflow实现)都使用(指数)移动平均和方差

请原谅我,但我不明白为什么。是因为使用移动平均线对性能更好吗?还是为了纯粹的计算速度?

参考:原论文

0 投票
2 回答
1121 浏览

tensorflow - 恢复 Tensorflow 模型:在检查点文件中找不到 batch_norm 层的 gamma/scale

我能够恢复模型并从检查点文件中提取权重、偏差和 batch_norm 层的参数。但是对于多个检查点文件(初始模型等),我找不到 BN 层的缩放/伽马因子。

例如,在公共 inceptionV3 检查点中,我可以定位到: InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean (DT_FLOAT) [64] InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance (DT_FLOAT) [64] InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/beta (DT_FLOAT) [64]

但是,没有诸如InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/gamma.

如何获得伽玛值或默认重新调整为 1?

非常感谢!

0 投票
2 回答
2869 浏览

tensorflow - Keras BatchNorm:训练准确性提高,而测试准确性降低

我正在尝试在 Keras 中使用 BatchNorm。训练的准确性会随着时间的推移而增加。从 12% 到 20%,缓慢而坚定。然而,测试准确度从 12% 下降到 0%。随机基线为 12%。

我非常认为这是由于 batchnorm 层(删除 batchnorm 层导致 ~12% 的测试准确度),这可能没有很好地初始化参数 gamma 和 beta。应用 batchnorm 时我需要注意什么特别之处吗?我真的不明白还有什么可能出了问题。我有以下模型:

模型=顺序()

default_Conv2D 和 default_Dense 定义如下:

0 投票
1 回答
537 浏览

tensorflow - Tensorflow 批量标准化是如何工作的?

我在我的深度神经网络中成功使用了 tensorflow 批量归一化。我正在按照以下方式进行操作:

它适用于训练和测试阶段。但是,当我尝试在另一个项目中使用计算出的神经网络参数时遇到问题,我需要自己计算所有矩阵乘法和东西。问题是我无法重现该tf.nn.batch_normalization函数的行为:

根据页面https://www.tensorflow.org/versions/r1.2/api_docs/python/tf/nn/batch_normalization上的公式:

但正如我们所见,

这与0.30664611由 Tensorflow 本身计算的 value 不同。那么我在这里做错了什么,为什么我不能自己计算批量标准化值?

提前致谢!

0 投票
2 回答
1424 浏览

tensorflow - 禁用 Keras 批量标准化/标准化

我正在使用一个简单的 Keras 模型进行系列预测。

我正在将整个系列中的输入标准化。

模型预测精度在训练期间似乎是正确的。但是,当我绘制model.predict()函数的输出时,我可以看到输出已经以某种方式缩放。这似乎是某种标准化/标准化类型的缩放。

更改训练的批量大小会影响结果。我尝试将批大小设置为输入集的大小,以便整个系列的训练在单个批中完成,这提高了结果,但仍然是缩放的。

我的假设是这与每个输入批次的标准化或输出标准化有关。我的模型中没有任何BatchNormalization图层。

有没有办法禁用 Keras 中输入/输出的默认规范化/标准化(并且这种默认行为是否存在)?

我正在使用带有 Tensorflow 后端和 Tensorflow 1.1 的 Keras 2。