问题标签 [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.
deep-learning - 使用批量标准化时的单一预测
我有一个 CNN,它在我创建的数据集上学习得很好。我向该网络添加了批量标准化以尝试提高性能。
但是..当我尝试对单个图像进行预测时,我总是得到相同的结果(无论图像如何)。我认为这是因为我需要批次来实际进行批次标准化。
那么是否可以使用 BN 使用 CNN 对单个图像进行预测?我想在我的网络完成训练后删除 BN 层,这是要走的路吗?
谢谢 :)
python - 输入秩为 4 时使用哪个 tensorflow 批处理规范代码?
我正在使用slim.batch_norm
分层并试图理解我的用例中的代码流。在我看来,如果输入等级为 2,则决定是否使用_fused_batch_norm()
或基类仅_fused_batch_norm()
在我的情况下使用的逻辑。如果等级为 4 并且函数本身(_fused_batch_norm),代码描述听起来也应该使用()) 支持 4 级,但逻辑似乎阻止调用它。以下是显示我所指内容的代码片段:
对于我的用例,我在默认设置下都有以下参数:
如果我的输入是 4 级,看起来代码将使用融合的实现,normalization_layers.BatchNormalization
我对逻辑的理解是否正确?
这是预期的和正确的行为吗?我想知道条件rank==2
是否真的应该是rank in [2,4]
?如果后者是正确的,那么这将是一个潜在的错误。如果原件是正确的,那为什么还要rank in [2,4]
确定feature_supported
呢?
deep-learning - Pytorch nn.functional.batch_norm 用于 2D 输入
我目前正在实施一个模型,我需要在测试期间更改运行均值和标准差。因此,我认为这nn.functional.batch_norm
将是比nn.BatchNorm2d
但是,我有一批图像作为输入,目前不确定如何获取图像。我将如何应用于nn.functional.batch_norm
批量 2D 图像?
我拥有的当前代码是这样的,即使这不正确,我也会发布此代码:
tensorflow - 我可以在 CNN 中使用层归一化吗?
我看到 Layer Normalization 是比 Batch Normalization 更现代的规范化方法,在 Tensorflow 中编码非常简单。但我认为层归一化是为 RNN 设计的,批量归一化是为 CNN 设计的。我可以使用处理图像分类任务的 CNN 层归一化吗?选择批量标准化或层的标准是什么?
machine-learning - 为什么在应用 Batch Normalization 时使用批处理进行预测是作弊?
在Quora 上的帖子中,有人说:
在测试时,该层应该一次只能看到一个测试数据点,因此计算整个批次的均值/方差是不可行的(并且是作弊)。
但是只要在训练过程中网络没有看到测试数据,使用几张测试图像不就可以了吗?
我的意思是,我们的网络已经被训练来使用批次进行预测,那么给它分配批次有什么问题呢?
如果有人可以解释我们的网络从不应该拥有的批次中获得了哪些信息,那就太好了:)
谢谢
neural-network - 使用 SELU 的批量归一化和自归一化神经网络之间的区别
我想知道批量归一化和自归一化神经网络之间的区别。换句话说,SELU(比例指数线性单元)会取代批量标准化吗?如何?
此外,我在查看 SELU 激活的值后,它们在范围内:[-1, 1]
. 虽然批量标准化不是这种情况。相反,BN
层之后(relu 激活之前)的值采用了[-a, a]
近似值,而不是[-1, 1]
。
这是我在 SELU 激活后和批处理规范层后打印值的方式:
以及 SELU 激活的类似代码...
Batch norm层定义如下:
因此,由于批范数输出更高的值,损失急剧增加,因此我得到了 nans。
此外,我尝试使用批量规范降低学习率,但这也无济于事。那么如何解决这个问题???
这是以下代码:
任何帮助深表感谢!!
python - 虚拟批范数的两种实现导致两种不同的结果
入门问题:
两个示例代码都应该导致不同的训练行为(任何损失/任何优化器)吗?
我的真实案例场景:
我正在尝试实现虚拟批处理规范,我有两个实现方式不同,它们的行为方式受到改进的 gan repository的广泛启发。此处显示的两种实现都进行了简化,以保留它们之间的主要差异。
第一次实现:
一切似乎都正常,验证和训练准确率收敛,损失下降。
第二次实施
这里只有训练收敛(但曲线与第一次实现略有不同),而验证损失增加并且准确性保持在随机猜测。
作为细节问题,我使用的是 GPU,启用了 XLA 的 tensorflow 1.2.1。任何线索我做错了什么?
编辑:
所以我尝试比较两个输出模型,并查看梯度(使用compute_gradients),以避免权重(然后是梯度)共享我在两个不同的范围内构建模型并分别加载相同的权重(来自先前训练的模型)在这两种型号上。
如果我只使用,我有相同的输出:
但是如果我同时使用以下方法查看梯度(每个元组的第一个元素由 Optimizer.compute_gradients(loss) 返回):
突然模型输出不同了......模型输出如何仅通过查看梯度而不使用 apply_gradients 来改变?此外,它似乎没有改变权重,因为如果我正在跑步:
模型输出仍然相同......
tensorflow - 你如何去规范化?
一旦你对你的数据进行了规范化,使值在 0-1 之间,你如何去规范化它以便你可以解释结果?
因此,当您对数据进行规范化并将其提供给您的网络并获得标准化数据的输出时。你如何反向归一化来获得原始数据?
tensorflow - tf.nn.batch_normalization 和 tf.nn.batch_norm_with_global_normalization 的区别
我正在尝试使用 tensorflow 实现批量标准化,并找到了这个不错的帖子。这两个函数似乎都采用相似的参数,但似乎人们更多地使用后者。
它们可以互换使用吗?如果不是,有什么区别?(为什么在 tensorflow 中有这么多类似的 API?另一个例子是tf.nn.softmax_cross_entropy_with_logits
and tf.losses.softmax_cross_entropy
。我尝试了两者,它们似乎工作正常,但我觉得也许我在这里遗漏了一些微妙的东西,可以彻底改变我的训练结果。
tensorflow - Moving_mean and Moving_variance in BatchNormalization layer of Keras
I want to export a set of pre-trained weights from Tensorflow to Keras. The problem is that batch normalization layers in Tensorflow embed only Beta and Gamma as trainable weights, whereas in Keras, we have Moving_mean and Moving_variance as well. I am confused where to obtain these weights from.