首页 > 解决方案 > Tensorflow:使用batch_norm函数时,在一层的“moving_variance”中获取NaN

问题描述

问题:

在使用SE_Inception_resnet_v2训练分类模型后,我使用了未见过的图像进行预测。然而,结果总是一样的。例如,结果始终是logits = [.1,.2,.3]

通过调试代码,我发现使用tensoflow的batch_norm函数归一化的值在一个特定层中都是零,使用batch_norm函数的其他层仍然可以输出归一化的输入值。在我的例子中,它位于输出所有零值的Reduction_B/cond/Merge:0节点中。

此外,我检查了该特定层上 batch_norm 函数的输入数据和参数。输入数据很好,但是参数moving_variance 是NaN,但moving_mean 很好。有趣的是,以前的moving_variance更新也很好。

我认为这是我的问题的原因,谁能解释可能是什么原因,我该如何解决?谢谢

标签: tensorflow

解决方案


现在问题已经解决了。解决方案是批处理的大小必须大于 1。我将在下面发布两个案例,以显示一个有效,另一个不适合我的案例。

案例一:(失败)

训练样本数:10
批量大小:1
迭代:10

案例2:(成功)

训练样本数:10
批量大小:2
迭代:5


推荐阅读