Подтвердить что ты не робот

Масштабирование слоя в Caffe

Я просматриваю прототип Caffe для глубоких остаточных сетей и заметил появление слоя "Scale".

layer {
    bottom: "res2b_branch2b"
    top: "res2b_branch2b"
    name: "scale2b_branch2b"
    type: "Scale"
    scale_param {
        bias_term: true
    }
}

Однако этот слой недоступен в каталоге Caffe layer. Может ли кто-нибудь объяснить функциональность этого уровня и значение параметров или указать последнюю документацию для Caffe?

4b9b3361

Ответ 1

Вы можете найти подробную документацию по caffe здесь.

В частности, для слоя "Scale" doc читает:

Вычисляет произведение двух входных Blobs, причем форма последнего Blob "трансляция" соответствует форме первого. Эквивалент разбивки последнего Blob, затем вычисление элементарного произведения.
Второй вход может быть опущен, и в этом случае он узнается как параметр слоя.

Кажется, что в вашем случае (одно "нижнее" ) этот слой узнает масштабный коэффициент для умножения "res2b_branch2b". Более того, поскольку scale_param { bias_term: true } означает, что слой изучает не только мультипликативный масштабный коэффициент, но и постоянный член. Итак, вычисляется передний проход:

res2b_branch2b <- res2b_branch2b * \alpha + \beta

Во время обучения сеть пытается узнать значения \alpha и \beta.

Ответ 2

Там также есть документация по нему в файле caffe.proto, вы можете найти "ScaleParameter".

Спасибо кучу за ваше сообщение:) Масштаб слоя был именно тем, что я искал. Если кому-то нужен пример для слоя, который масштабируется скаляром (0.5), а затем "добавляет" -2 (и эти значения не должны меняться):

layer {
  name: "scaleAndAdd"
  type: "Scale"
  bottom: "bot"
  top: "scaled"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  param {
    lr_mult: 0
    decay_mult: 0
  }
  scale_param {
    filler {
      value: 0.5    }
    bias_term: true
    bias_filler {
      value: -2
    }
  }
}

(Возможно, здесь нет необходимости в decay_mult, но не знаю. См. комментарии.) Кроме этого:

  • lr_mult: 0 - отключает обучение для "этого параметра" - я думаю, что сначала "param {" всегда (?) относится к весам, второе - к смещению (lr_mult не зависит от ScaleLayer)
  • filler: a "FillerParameter" [см. caffe.proto], рассказывающий, как заполнить оммитированный второй blob. Значение по умолчанию - одно постоянное значение:.....
  • bias_filler: параметр, указывающий, как заполнить необязательный blas blob
  • bias_term: есть ли смещение blob

Все взято из caffe.proto. И: я тестировал только слой выше с обоими значениями наполнителя = 1.2.