问题标签 [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.
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 可能是最好的选择,但我无法解决破解代码问题。与其他图书馆的解决方案也将受到欢迎。
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. 将批量大小从 64 增加到 256 2. 降低学习率 3. 添加 L2-reg 和/或不同幅度的 dropout 4. 训练/验证拆分率:20%、30%。仅供参考,数据集是 kaggle 猫狗图像。
python - 使用带有 tensorflow 的 BatchNorm 层训练 Keras 模型
我正在使用keras构建模型,并在tensorflow中编写优化代码和所有其他代码。当我使用像Dense或Conv2D这样非常简单的层时,一切都很简单。但是在我的 keras 模型中添加BatchNormalization层会使问题变得复杂。
由于BatchNormalization层在训练阶段和测试阶段的行为不同,我发现我的 feed_dict 需要K.learning_phase ( ):True。但是以下代码运行不正常。它运行没有错误,但模型的性能并没有变得更好。
当我尝试使用 keras fit函数训练 keras 模型时,效果很好。
我应该怎么做才能在tensorflow中使用BatchNormalization层训练keras模型?
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]
有人知道我在做什么错吗?
python-2.7 - 批量标准化中的维度
我正在尝试在Tensorflow中构建一个通用的批量标准化函数。
我在这篇文章中学习了批量标准化,我觉得这很友好。
我对比例和beta变量的维度有疑问:在我的情况下,批量标准化应用于每个卷积层的每个激活,因此,如果我将卷积层的输出作为大小为:
我需要比例和beta与卷积层输出具有相同的维度,对吗?
这是我的功能,程序可以工作,但我不知道是否正确
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?
非常感谢!
tensorflow - Keras BatchNorm:训练准确性提高,而测试准确性降低
我正在尝试在 Keras 中使用 BatchNorm。训练的准确性会随着时间的推移而增加。从 12% 到 20%,缓慢而坚定。然而,测试准确度从 12% 下降到 0%。随机基线为 12%。
我非常认为这是由于 batchnorm 层(删除 batchnorm 层导致 ~12% 的测试准确度),这可能没有很好地初始化参数 gamma 和 beta。应用 batchnorm 时我需要注意什么特别之处吗?我真的不明白还有什么可能出了问题。我有以下模型:
模型=顺序()
default_Conv2D 和 default_Dense 定义如下:
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 不同。那么我在这里做错了什么,为什么我不能自己计算批量标准化值?
提前致谢!
tensorflow - 禁用 Keras 批量标准化/标准化
我正在使用一个简单的 Keras 模型进行系列预测。
我正在将整个系列中的输入标准化。
模型预测精度在训练期间似乎是正确的。但是,当我绘制model.predict()
函数的输出时,我可以看到输出已经以某种方式缩放。这似乎是某种标准化/标准化类型的缩放。
更改训练的批量大小会影响结果。我尝试将批大小设置为输入集的大小,以便整个系列的训练在单个批中完成,这提高了结果,但仍然是缩放的。
我的假设是这与每个输入批次的标准化或输出标准化有关。我的模型中没有任何BatchNormalization
图层。
有没有办法禁用 Keras 中输入/输出的默认规范化/标准化(并且这种默认行为是否存在)?
我正在使用带有 Tensorflow 后端和 Tensorflow 1.1 的 Keras 2。