1

我有一个旨在构建架构的功能

Input(x) -> o=My_ops(x,128) -> o=slim.batch_norm(o)

所以,我的功能是

def _build_block(self, x, name, is_training=True):
  with tf.variable_scope(name) as scope:
    o = my_ops(x, 256)
    batch_norm_params = {
      'decay': 0.9997,
      'epsilon': 1e-5,
      'scale': True,
      'updates_collections': tf.GraphKeys.UPDATE_OPS,
      'fused': None,  # Use fused batch norm if possible.
      'is_training': is_training
    }
    with slim.arg_scope([slim.batch_norm], **batch_norm_params) as bn:
      return slim.batch_norm(o)

我对吗?我可以is_training像上面的函数那样设置吗?如果没有,你能帮我解决吗?

4

1 回答 1

1

你的功能没问题。is_training是的,你可以slim.batch_norm这样设置。

但是对我来说,您的代码看起来不必要地复杂。这是一个等效版本:

def _build_block(self, x, name, is_training=True):
  with tf.variable_scope(name):
    o = my_ops(x, 256)
    return slim.batch_norm(o, decay=0.9997, epsilon=1e-5, scale=True, is_training=is_training)

请注意,我删除了arg_scope(因为它的主要用例是对多个层重复相同的参数,你只有一个),省略和(因为这些是默认值),删除(因为它未使用)。updates_collections=tf.GraphKeys.UPDATE_OPSfused=Noneas scope

于 2018-01-20T16:24:11.467 回答