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

tensorflow - TensorFlow 保存/恢复批量规范

我在 Tensorflow 中训练了一个具有批量规范的模型。我想保存模型并恢复它以供进一步使用。批量规范由

阶段是True在训练和False测试期间。

似乎只是简单地调用

不能很好地工作,因为当我恢复模型时,它首先说恢复成功。它还说Attempting to use uninitialized value batch_normalization_585/beta如果我只在图中运行一个节点。这与未正确保存模型或我错过的其他事情有关吗?

0 投票
1 回答
187 浏览

python - 引入 Batch Normalization 会破坏以后的训练

我试图(未成功)在我的模型中引入批量标准化,如下所示。(从def LeNet(x)代码中的块开始。这是没有BN的模型)。

我试图通过这样做来介绍BN:

并为优化器做:

问题是,即使我已经注释掉了批归一化层和tf.control_dependencies部分,并重新运行训练,我的准确率下降到 2% 左右(并且仍然存在),而之前它在 70% 的区域。

我在 tf 版本 1.3.0 的 Jupyter Notebook 上运行它。我知道这tf.control_dependencies部分是必需的,因为 BN 计算批次之间事物的移动平均值。

因此,如果我分解问题:

  1. 为什么即使我注释掉了 BN 部分,训练也会受到影响。
  2. 究竟在tf.control_dependencies做什么?
  3. 在 tensorflow 中使用 BN 有什么额外的事情要做吗?

参考:

BN 版本在这里

0 投票
1 回答
495 浏览

machine-learning - 如何防止 caffe 中的体重更新

我的网络的某些层加载了预训练的模型。我想修复它们的参数并训练其他层。

我按照此页面 设置lr_multi decay_multi为 0, propagate_down: false, 甚至base_lr: 0 weight_decay: 0在求解器中。但是,测试损失(每次测试使用所有测试图像)在每个迭代中仍然变化非常缓慢。经过数千次迭代后,准确率将变为 0(加载预训练模型时为 80%)。

这是一个两层示例,我只是初始化权重并将上述参数设置为0。我想在这个示例中对所有层进行feze,但是当训练开始时,损失不断变化......

这是求解器:

并记录:

我想知道我在 caffe 的更新过程中错过了什么:(

0 投票
1 回答
588 浏览

tensorflow - 使用 tf.layers.batch_normalization 预处理 SELU 激活函数的输入?

SELU 激活函数 ( https://github.com/bioinf-jku/SNNs/blob/master/selu.py ) 要求将输入归一化,使其平均值为 0.0,方差为 1.0。因此,我尝试对原始数据应用tf.layers.batch_normalization( axis=-1) 以满足该要求。每批原始数据的形状为[batch_size, 15],其中 15 表示特征数。下图显示了从tf.layers.batch_normalization(约 20 个时期)返回的 5 个这些特征的方差。它们并不像预期的那样都接近 1.0。平均值也并非都接近 0.0(图表未显示)。

我应该如何独立地对 15 个特征进行标准化(我希望标准化后的每个特征都具有 mean = 0 和 var = 1.0)?

在此处输入图像描述

0 投票
1 回答
91 浏览

tensorflow - 在tf.slim中,是否需要将依赖添加到loss

在 tf.slim 中,我使用了 batch_norm。

我的问题是:我是否需要明确地将依赖项添加到损失中?

我想,slim 知道我使用了 batch_norm,它是否已经自动将依赖添加到 loss 中?我很困扰。

0 投票
0 回答
246 浏览

tensorflow - 当 is_training 标志为 False 时,tensorflow 批量归一化无法按预期工作

我有一个模型,我在每个卷积层都期望最后一个之后执行批量标准化。我使用函数 tensorflow.contrib.layers.batch_norm 函数来执行此操作。当我将 is__training 标志设置为 True 时,报告的损失值似乎是正确的。对于我的特定示例,它从 60 秒开始并减少到几乎为 0。当我将 is_training 标志设置为 flase 时,我得到的损失值大约为 1e10,这看起来很荒谬。

我附上了我在代码中使用的代码段。

可能是什么原因?

0 投票
0 回答
217 浏览

python - 使用 slim BN 时使用占位符进行 is_training 时出现 OOM

我为 is_training 参数设置了一个占位符,slim.batch_norm如下所示:

像这样喂它:

当我用 True 输入 is_training_ph 时,程序正常,但是当我用 False 输入 is_traing_ph 时,程序会抛出 OOM 错误。

而且,当我不使用这样的占位符时:

这不是任何问题。

这是我的完整测试代码和日志跟踪: https ://gist.github.com/xxxzhi/8fc8f840a8ec07fdbae7c2fc2c77b3da

有谁知道原因?它是一个错误slim.batch_norm吗?

GPU的显存为12G。CUDA 8,张量流1.2,张量流1.3

提前致谢。

0 投票
2 回答
4925 浏览

deep-learning - 如何在非序列 keras 模型中包含批量标准化

我是 DL 和 Keras 的新手。目前我尝试实现一个类似 Unet 的 CNN,现在我想将批量归一化层包含到我的非序列模型中,但现在还没有真正做到。

这是我目前尝试包括它:

批量标准化是否以正确的方式使用?在我读到的 keras 文档中,您通常想要规范化“特征轴”!?这是模型摘要中的一个简短片段:

在这种情况下,我的特征轴是轴 3(从 0 开始计数),对吗?我阅读了有关是否应该在激活函数之前或之后实施批量标准化的讨论。在这种情况下,它是在激活函数之后使用的,对吧?是否有可能在激活功能之前使用它?

非常感谢您的帮助和反馈!真的很感激!

0 投票
2 回答
563 浏览

python - Tensorflow:同一图像的不同激活值

我正在尝试重新训练(读取微调)MobileNet图像分类器。

tensorflow 给出的再训练脚本来自教程),仅更新新添加的全连接层的权重。我修改了这个脚本来更新预训练模型的所有层的权重。我正在使用深度乘数为 0.25 且输入大小为 128 的 MobileNet 架构。

然而,在重新训练时,我观察到一件奇怪的事情,如果我将特定图像作为输入与其他一些图像一起进行批量推理,则某些层之后的激活值与单独传递图像时的激活值不同。来自不同批次的相同图像的激活值也不同。示例 - 对于两个批次 - batch_1 : [img1, img2, img3]; batch_2 : [img1, img4, img5]。img1 的激活与这两个批次不同。

这是我用于推理的代码 -

上面的代码按原样执行一次,并在最后一行进行以下更改:

以下是图中的一些节点:

现在,当layerXname = 'MobilenetV1/MobilenetV1/Conv2d_0/convolution' 上述两种指定情况下的激活相同时。(即 layerxactivations 和 layerxactivations_batch[0] 是相同的)。但是在这一层之后,所有层都有不同的激活值。我觉得'MobilenetV1/MobilenetV1/Conv2d_0/convolution'层之后的batchNorm操作对于批量输入和单个图像的行为不同。还是问题是由其他原因引起的?

任何帮助/指针将不胜感激。

0 投票
1 回答
400 浏览

tensorflow - Inception 网络 BatchNorm 层返回 None 梯度

嗨,我正在尝试使用自定义的损失函数来微调初始网络。它是一个三元组损失函数。

这个函数来自 facenet.py

注意:value参数是softmax之前logits层的输出。

当我计算梯度时,我发现BatchNorm/moving_varianceBatchNorm/moving_variance没有梯度。为什么它返回 None 梯度值?

通过可视化,我发现没有从损失到 BatchNorm 范围的数据流,为什么权重有来自损失节点的数据流而 Batchnorm 没有?

在此处输入图像描述