Масштабирование слоя в Caffe
Я просматриваю прототип Caffe для глубоких остаточных сетей и заметил появление слоя "Scale"
.
layer {
bottom: "res2b_branch2b"
top: "res2b_branch2b"
name: "scale2b_branch2b"
type: "Scale"
scale_param {
bias_term: true
}
}
Однако этот слой недоступен в каталоге Caffe layer. Может ли кто-нибудь объяснить функциональность этого уровня и значение параметров или указать последнюю документацию для Caffe?
Ответы
Ответ 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.