问题标签 [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 - 如何在 Keras 的测试期间使用 Batch Normalization?
我目前正在尝试在 Keras 中使用 Batch Normalization 来实现模型。我已经成功地在培训阶段实施了它。
但是,对于测试,Batch Normalization 在进行网络前向传递之前计算整个总体的统计数据(均值和方差)(预先计算 BN 均值和方差,然后保持静态;这与训练相反阶段,其中均值和方差由批次确定)。
我关于 Keras 的问题是:
假设 (X, y) 是整个人口。假设 (X_batch, y_batch) 是一个批次(整个种群的一个子集)
如果我使用
如何将 X 和 y 的整个总体的均值和方差传递给批量归一化层?有什么办法可以让 keras 自动处理这个问题?
deep-learning - 在 Matconvnet 中,当 Batchnormalization=false 为 true 时,是否可以进行批量标准化
我正在使用 matconvnet 库。在 MNIST 示例中,默认参数 batchnormalization=true。但是 VL_NNBNORM() 函数什么都没有(只是注释行)。它是否有效?还是我必须更改 vl_nnbnnorm 功能?我的意思是,如果我将 batchnormalization=false 更改为 true,就足够了吗?谢谢..
python - TypeError:不兼容的可广播维度。预期(假,),得到(真,)
我正在使用 theano 和千层面。
我正在尝试使用 BatchNorm,但出现此错误。有人可以指导我,有什么问题吗?或者,如果我可以获得具有这种不匹配的变量的名称?
谢谢!
编辑1:
我正在尝试做这样的事情:
日志:
检查变量后,我知道代码中断了均值。我不知道为什么。
tensorflow - 使用多个 GPU 时,Tensorflow ExponentialMovingAverage 不适合批量归一化?
最近,我尝试使用多个 GPU 来加速训练。但是我对批量标准化有一些问题。具体来说,当我使用ExponentialMovingAverage来获得平均批次平均值和变化时,准确性很差。
我尝试了几种方法(函数)来实现批量标准化,如下所示。其余部分代码都是一样的,我只是尝试了不同的批量归一化函数。使用 2 个 GPU 时,方法 2-4 运行良好,但方法 1 在测试数据集上的准确度确实很差。当我切换到只使用 1 个 GPU 时,所有方法都运行良好。
数据集为 CIFAR10,batch size 为 128。当使用 2 个 GPU 时,每个 GPU 处理 64 个样本,然后对每个 GPU 的梯度进行平均,就像 tensorflow 教程CIFAR10 multi-gpu一样。
我的 tensorflow 版本是 1.1.0,python 版本是 2.7,操作系统是 ubuntu 16.04。CUDA 版本是 7.5.17。
我的问题是为什么使用 tf.train.ExponentialMovingAverage(方法 1)在使用多个 GPU 时效果如此糟糕?我真的很困惑。
方法一:
方法二:
方法三:
方法四:
方法 1 的结果:
方法 2 - 4 的结果(它们没有太大区别,所以只发布其中一个):
tensorflow - 我们可以对具有不同数据分布的实例使用批量归一化和迁移学习吗?
本教程具有用于训练和测试阶段的批量正常层的张量流实现。
当我们使用迁移学习时,可以使用批量归一化层吗?特别是当数据分布不同时。
因为在推理阶段,BN 层只使用固定的小批量均值和方差(这是在训练分布的帮助下计算的)。那么如果我们的模型有不同的数据分布,它会给出错误的结果吗?
caffe - 与在相同数据集上进行训练相比,测试时 Caffe 准确度下降
我在测试阶段遇到了 Caffe BatchNorm 层的问题。至少我认为它与 BatchNorm 层有关这个问题已经出现了几次,但我仍然没有找到适合我的解决方案。
在训练过程中一切看起来都很好,但在测试过程中准确率急剧下降(在同一数据集上)。我也在谷歌群里问过,但没有得到答复:https ://groups.google.com/forum/#!topic/caffe-users/ 0t4jehvN6oQ 在那里你也会找到我的network.prototxt
我在 U-Net 分割网络中使用 BatchNorm。在测试期间,我使用了 1 的批量大小,但这不应该影响“use_global_stats = true”时的结果,对吧?
我基本上尝试了如何在 caffe 中使用“BatchNorm”层中讨论的所有变体?但没有任何效果。
任何人都可以帮忙吗?
彼得
python - tf.layers 模块中的批量标准化
我正在使用 Tensorflow 1.0 tf.layers 模块。但是,我发现很难理解在 tf.layers.conv2d 函数中应用批量标准化的位置。
如果我理解得很好,这个函数有 L2/L1 的内核和偏置正则化器,以及一个活动正则化器。然而,我的一个假设是活动正则化器是在激活函数之后而不是之前应用的。因此,它可以用于 dropout。我不明白批量标准化在哪里应用。我的想法是:
- 它是默认的并且一直使用吗?
- 我应该将激活函数应用为无,然后将结果通过批处理规范层,然后再单独激活吗?
第二个选项将起作用。但是,我觉得可以提供更优雅的答案。
deep-learning - 批量标准化使训练更快?
我到处读到,除了提高准确性方面的表现外,“批量标准化使训练更快”。
我可能误解了一些东西(因为 BN 已不止一次被证明是有效的),但对我来说这似乎是不合逻辑的。
实际上,将 BN 添加到网络中会增加要学习的参数数量:BN 带来了要学习的“Scales”和“offset”参数。请参阅:https ://www.tensorflow.org/api_docs/python/tf/nn/batch_normalization
网络如何在“有更多工作要做”的同时更快地训练?
(我希望我的问题是合法的,或者至少不是太愚蠢)。
谢谢 :)