【问题标题】:Updating batch_normalization mean & variance using Estimator API使用 Estimator API 更新 batch_normalization 均值和方差
【发布时间】:2018-03-10 02:41:46
【问题描述】:

文档对此并不是 100% 清楚:

注意:训练时,moving_mean 和moving_variance 需要更新。默认情况下,更新操作放在 tf.GraphKeys.UPDATE_OPS 中,因此需要将它们作为依赖项添加到 train_op。例如:

(见https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization

这是否意味着保存moving_meanmoving_variance 所需的全部内容如下?

def model_fn(features, labels, mode, params):
   training = mode == tf.estimator.ModeKeys.TRAIN
   extra_update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)

   x = tf.reshape(features, [-1, 64, 64, 3])
   x = tf.layers.batch_normalization(x, training=training)

   # ...

  with tf.control_dependencies(extra_update_ops):
     train_op = optimizer.minimize(loss=loss, global_step=tf.train.get_global_step())

换句话说,只是使用

with tf.control_dependencies(extra_update_ops):

注意保存moving_meanmoving_variance

【问题讨论】:

    标签: tensorflow machine-learning batch-normalization tensorflow-estimator


    【解决方案1】:

    事实证明,这些值可以自动保存。边缘情况是,如果您在将批量标准化操作添加到图中之前获取更新操作集合,则更新集合将为空。这以前没有记录,但现在是。

    使用 batch_norm 的注意事项是在调用 tf.layers.batch_normalization 之后再调用 tf.get_collection(tf.GraphKeys.UPDATE_OPS)

    【讨论】:

      【解决方案2】:

      是的,添加这些控制依赖项将保存均值和方差。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2020-12-26
        • 2012-04-13
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        • 2018-06-04
        相关资源
        最近更新 更多