tensorflow - 具有 is_training 'true' 和 'false' 的 Batchnorm 的不同行为 - 冻结模型的准确性不同
问题描述
我正在尝试推断 mobilenetV2 模型。
我已经使用 tensorflow/models/slim 训练了模型。该模型给出了适当的精度is_training=true
。但是当我这样做is_training=false
并保存模型时,推理的准确性就会降低。
在这两种情况下,我可以在图表中看到以下差异。随着is_training=true
, thenmoving_mean
和moving_variance
becomeConst
和Const_1
分别。这是我能看到的唯一区别。并且在推理过程FusedBatchNorm
中,这两种情况下节点的输出是不同的。
请有人帮我理解为什么会这样以及如何解决这个问题?
解决方案
有同样的问题。
使用 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 的测试中获得了更好的准确性:假
推荐阅读
- android - 程序类型已经存在:com.google.logging.type.HttpRequestProto [Android]
- python - Django:具有多个 fk 字段的 ManyToMany 字段
- c# - 使用 xNet(c#)在 Http 请求后更改代理服务器
- android - 使用毕加索在抽屉中设置图像
- python-sphinx - Sphinx apidoc 不够自动化
- ruby - 避免 Nokogiri::XML::XPath::SyntaxError: ERROR: Undefined namespace prefix
- java - 在java中解析字符串时保留时区
- docker - RUN systemctl start newrelic-infra,error :Failed to get D-Bus connection: Operation not allowed
- c++ - getopt.h ““const char*”类型的值不能用于初始化“char*”类型的实体”
- swift - 如何使用默认导航项后退按钮创建展开转场?