【发布时间】:2018-08-23 18:22:25
【问题描述】:
问题:
在使用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 更新也很好。
我认为这是我的问题的原因,谁能解释可能是什么原因,我该如何解决?谢谢
【问题讨论】:
-
nan的差异表明您的输入在某些时候可能都是相同的......但即便如此,正是这个原因,tensorflow 的 batch_norm 实现具有variance_epsilon。至于解决问题...moving_variance不应该在训练模式下使用,那么您可以在训练模式下测试行为(对于您的预测图像)吗?您可能在某个时候有一个单一的无效图像,将值设置为 NaN,您可能只需要重置这些移动平均值(这将很快重新训练自己。) -
已解决,已在下方发布解决方案。虽然我的输入数据没有问题,但你告诉我检查的正确方向。非常感谢,杰克!
标签: tensorflow