首页 > 解决方案 > 具有 is_training 'true' 和 'false' 的 Batchnorm 的不同行为 - 冻结模型的准确性不同

问题描述

我正在尝试推断 mobilenetV2 模型。

我已经使用 tensorflow/models/slim 训练了模型。该模型给出了适当的精度is_training=true。但是当我这样做is_training=false并保存模型时,推理的准确性就会降低。

在这两种情况下,我可以在图表中看到以下差异。随着is_training=true, thenmoving_meanmoving_variancebecomeConstConst_1分别。这是我能看到的唯一区别。并且在推理过程FusedBatchNorm中,这两种情况下节点的输出是不同的。

请有人帮我理解为什么会这样以及如何解决这个问题?

两张图的比较

标签: tensorflowtensorflow-lite

解决方案


有同样的问题。

使用 TF 文档建议如下:

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
    train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)

我在使用is_training 的测试中获得了更好的准确性:假


推荐阅读