首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用tf.nn.batch_normalization处理移动均值和移动方差?

如何利用tf.nn.batch_normalization处理移动均值和移动方差?
EN

Stack Overflow用户
提问于 2018-09-14 14:20:14
回答 1查看 1K关注 0票数 2

在我的实现中,我必须先定义权重,不能使用像tf.layers.batch_normalization或tf.layers.dense这样的tensorflow中的高级函数。因此,要进行批处理规范化,我需要使用tf.nn.batch_normalization。我知道,对于计算每个小批的均值和方差,我可以使用tf.nn.moments,但是移动均值和方差又如何呢?有没有人有这样做的经验,或者知道一个实现的例子?我看到人们谈论使用tf.nn.batch_normalization可能很棘手,所以我想知道这样做的复杂性。换句话说,是什么使它变得棘手,以及在实现过程中我应该注意哪些要点?除了移动平均值和方差之外,还有什么是我应该知道的吗?

EN

回答 1

Stack Overflow用户

发布于 2018-09-14 15:35:10

你必须对running_meanrunning_variance这两个术语保持警惕。在数学和传统的计算机科学中,它们被称为计算这些值而不看完整数据的方法。它们也被称为online版本的meanvariance。并不是说他们能够事先准确地确定meanvariance。随着更多数据的输入,它们只是不断地提高一些变量meanvariance的值。如果您的数据大小是有限的,那么一旦看到了完整的数据,它们的值就会与所计算的值相匹配,如果完整的数据是可用的。

批归一化的情况不同。您不应该像在上面的段落中那样以相同的方式来看待running meanrunning variance

训练时间

在训练期间,meanvariance是为batch计算的。他们不是running meanrunning variance。因此,您可以安全地使用tf.nn.moments来完成这一任务。

测试时间

在测试期间,您使用应该称为population_estimated_meanpopulation_estimated_variance的内容。这些数量是在培训期间计算的,但没有直接使用。它们是计算出来的,以便以后在测试时使用。

现在的一个陷阱是,有些人可能想要使用Knuth Formula来计算这些数量。这是不可取的。为什么?:,因为,培训是通过几个epochs完成的。因此,相同的数据集显示的次数与epochs的数量一样多。由于数据增强通常也是随机的,因此计算标准running meanrunning variance可能是危险的。相反,通常使用的是exponentially decaying estimate

您可以通过使用tf.train.ExponentialMovingAverage over batch_meanbatch_variance来实现这一点。在这里,你明确指出过去的样本和现在的样本有多大的相关性。通过设置non-trainable,确保用于计算这个值的变量应该是trainable=False

在测试期间,您将使用这些变量作为meanvariance

有关实现的更多细节,您可以查看此链接

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52333905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档