问题标签 [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 - Tensorflow:使用 Batch Normalization 会导致较差(不稳定)的验证损失和准确性
我正在尝试使用tf.layers.batch_normalization()使用批量标准化,我的代码如下所示:
我的火车步骤如下所示:
在训练期间,我正在为图表提供:
在验证过程中,
我的损失和准确率曲线(橙色是训练,蓝色是验证): 损失与迭代次数的关系图 ,准确率与迭代次数的关系图
验证损失(和准确性)似乎非常不稳定。我的批量标准化的实现是错误的吗?或者这对于批量标准化是正常的,我应该等待更多的迭代?
tensorflow - 如何在 Tensorflow 中更新多个 GPU 中的 BatchNorm 变量
我有一个训练 Batch Norm (BN) 层的网络。我的批量大小是 16,因此,我必须使用多个 GPU。我遵循了inceptionv3的例子,可以总结为
不幸的是,它对 BN 层使用了 slim 库,而我使用标准 BN tf.contrib.layers.batch_norm
为了收集moving_mean和moving_variance,我使用了tf.GraphKeys.UPDATE_OPS
最后,在多个 GPU 中使用 BN 的想法可以借鉴 inceptionv3 为
虽然代码运行没有错误,但性能非常低。看来我没有正确收集BN参数。你能看看我的代码,给我一些在多个 GPU 中训练 BN 的方向吗?谢谢
neural-network - 对冷冻重量应用批量标准化是一种好习惯吗?
我想知道在那些具有冻结权重和偏差的层上使用批处理规范层是否很常见。在我的特殊情况下,我已经在 ImageNet 上预训练了 VGG19 和权重。我现在要做的是用预训练的权重训练这个网络,并在每个非线性之前添加批处理规范层。我的问题是,即使早期层的权重被冻结意味着不可训练,在每一层上使用批处理规范层是一种好习惯吗?我的第一个想法是这是一种很好的做法,因为即使那些较早的层不可训练,但批处理规范参数仍然是可训练的,因此这些冻结层的输入应该被归一化并且具有良好的分布。如果您对此有任何想法,请给我直观的解释。对不起,我的英语很差,感谢您的关注。
tensorflow - Keras Batchnormalization,训练数据集和评估的不同结果
我正在训练 CNN,为了调试我的问题,我正在处理实际训练数据的一小部分。
在训练过程中,损失和准确性似乎非常合理且相当不错。(在示例中,我使用相同的小子集进行验证,问题已经显示在这里)
适合 x_train 并在 x_train 上验证,使用 batch_size=32
当我在相同的训练数据集上进行评估时,准确度确实与我在训练期间看到的有所不同(我希望它至少与在同一数据集上进行训练时一样好)。
当直接评估或使用
我得到,类似于验证(Evaluating on x_train using batch_size=32):
如果我将后端设置为学习阶段,结果会再次变得相当好,因此每批标准化似乎运作良好。我怀疑没有正确使用累积的均值和方差。
所以之后
我得到(使用 batch_size=32 对 x_train 进行评估):
我在第一个卷积层之后添加了批标准化层,如下所示:
再往下,我还会有一些 dropout 层,我将其删除以研究 Batchnormalization 行为。我的打算是在非训练阶段使用该模型进行正常预测。
它不应该那样工作,还是我缺少一些额外的配置?
谢谢!
我正在使用 keras 2.0.8 和 tensorflow 1.1.0 (anaconda)
tensorflow - 批量大小 ==1 => 输出全零的 Tensorflow 和批量标准化
我有一个关于对 BatchNorm (稍后是 BN)的理解的问题。
我有一个运行良好的卷积网络,我正在编写测试来检查形状和输出范围。我注意到,当我设置 batch_size = 1 时,我的模型输出零(logits 和激活)。
我用 BN 制作了最简单的 convnet 原型:
Input => Conv + ReLU => BN => Conv + ReLU => BN => Conv Layer + Tanh
该模型使用xavier 初始化进行初始化。我猜想 BN在训练期间做了一些需要 Batch_size > 1 的计算。
我在 PyTorch 中发现了一个似乎在谈论这个的问题:https ://github.com/pytorch/pytorch/issues/1381
谁能解释一下?对我来说还是有点模糊。
示例运行:
重要提示:运行此脚本需要 Tensorlayer 库:pip install tensorlayer
给出以下输出:
python - BatchNorm 动量约定 PyTorch
batchnorm动量约定(默认 = 0.1)是否与其他库中的一样正确,例如 Tensorflow,默认情况下它似乎通常为 0.9 或 0.99?或者,也许我们只是使用不同的约定?
tensorflow - 如何在 tensorflow 中的自定义操作/层之后添加 slim.batch_norm?
我有一个旨在构建架构的功能
所以,我的功能是
我对吗?我可以is_training
像上面的函数那样设置吗?如果没有,你能帮我解决吗?
python-3.x - tf.layers.batch_normalization 在使用 Tensorflow v 1.4 但不是 1.0 时抛出 data_type 错误
以下语句,bn1 = tf.contrib.layers.batch_normalization(inputs=conv1, axis=1, training = is_training) 抛出错误:InternalError: FusedBatchNorm 的 CPU 实现目前仅支持 NHWC 张量格式。在我的 CPU 上使用 tensorflow v:1.4 但是,我确保代码使用 NHWC 格式的数据。同一段代码可以在我朋友的 CPU 上运行,唯一的区别是他使用的是 Tensorflow v.1.0,并且代码运行流畅,没有问题。
我试图查找 tensorflow 文档, https: //www.tensorflow.org/performance/performance_guide 它建议输入两个额外的参数:fused=True,data_format='NHWC'。
但是,根据 https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization ,上述两个论点没有这样的规定。事实上,代码会抛出一个错误,说 batch_normalization 收到了一个意外的参数。
任何关于问题背后的潜在原因以及我如何在不回滚我的 Tensorflow 版本(因为那将是荒谬的)的情况下解决它的任何回应都是最受欢迎的。非常感谢您的时间和精力。
r - 如何在 LSTM 中有效地使用批量归一化?
我正在尝试使用 R 中的 keras 在 LSTM 中使用批量标准化。在我的数据集中,目标/输出变量是Sales
列,并且数据集中的每一行都记录Sales
了一年(2008-2017)中的每一天。数据集如下所示:
我的目标是建立一个基于此类数据集的 LSTM 模型,该模型应该能够在训练结束时提供预测。我正在用 2008-2016 年的数据训练这个模型,并使用 2017 年数据的一半作为验证,其余的作为测试集。
以前,我尝试使用辍学和提前停止来创建模型。如下所示:
模型如下所示
为了训练模型,提前停止与验证集一起使用。
最重要的是,我想使用批量标准化来加速训练。根据我的理解,要使用批量归一化,我需要将数据分成批次,并申请layer_batch_normalization
每个隐藏层的输入。模型层如下所示:
该模型如下所示:
训练模型看起来像以前一样。唯一的区别在于训练和验证数据集,它们的大小是batch_size
(这里是 32)的倍数,通过从第二批到最后一批重新采样数据。
但是, 的性能比 的mdl1
要好得多mdl2
,如下所示。
我不确定我到底做错了什么,因为我从 keras(以及一般的实用神经网络)开始。此外,第一个模型的性能也不是很好;任何关于如何改进的建议也很好。
deep-learning - 范围 [0 inf] 图像的批量归一化
我正在研究一个自动编码器网络,输出医学图像。图像像素值是定量的,范围为 [0 inf]。我的网络输入也是范围 [0 inf] 的定量。基本上,如果输入像素值增加了 10 倍,那么输出像素值也应该增加 10 倍。
我见过的大多数工作都使用缩放到 [0 255] 的图像。由于我想保留输出的实际缩放和定量信息,我的问题是:在您的自动编码器中使用批量标准化层是否合适?还是会丢失所有缩放比例,只保留相对像素信息?
我很感激任何想法!:)