Как следует использовать слой "BatchNorm" в caffe?

я немного смущен тем, как я должен использовать/insert "BatchNorm" слой в моей модели.
Я вижу несколько различных подходов, например:

ResNets: "BatchNorm"+"Scale" (нет совместного использования параметров)

"BatchNorm" слой сразу после "Scale" слоев:

layer {
    bottom: "res2a_branch1"
    top: "res2a_branch1"
    name: "bn2a_branch1"
    type: "BatchNorm"
    batch_norm_param {
        use_global_stats: true
    }
}

layer {
    bottom: "res2a_branch1"
    top: "res2a_branch1"
    name: "scale2a_branch1"
    type: "Scale"
    scale_param {
        bias_term: true
    }
}

пример cifar10 только "BatchNorm"

в Примере cifar10, предоставленном с caffe,"BatchNorm" is используется без каких-либо "Scale" после этого:

layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
}

cifar10 разные batch_norm_param на TRAIN и TEST

batch_norm_param: use_global_scale между TRAIN и TEST фаза:

layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  batch_norm_param {
    use_global_stats: false
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  include {
    phase: TRAIN
  }
}
layer {
  name: "bn1"
  type: "BatchNorm"
  bottom: "pool1"
  top: "bn1"
  batch_norm_param {
    use_global_stats: true
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  param {
    lr_mult: 0
  }
  include {
    phase: TEST
  }
}

так что же это должно быть?

как использовать"BatchNorm" слой в кафе?

1 ответов


Если вы следуете оригинальной бумаге, нормализация пакета должна сопровождаться масштабом и слоями смещения (смещение может быть включено через масштаб, хотя это делает параметры смещения недоступными). use_global_stats также следует изменить с обучения (False) на тестирование/развертывание (True) - это поведение по умолчанию. Обратите внимание, что первым примером является prototxt для развертывания, поэтому для него правильно установить значение True.

Я не уверен в общем параметры.

Я сделал запрос на вытягивание, чтобы улучшить документы по нормализации пакета, но затем закрыл его, потому что я хотел его изменить. И потом, я так и не вернулся к этому.

обратите внимание, что я думаю lr_mult: 0 на "BatchNorm" больше не требуется (возможно, не пускают?), хотя я сейчас не нахожу соответствующего пиара.