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

Когда использовать слои на месте в Caffe?

Устанавливая нижнее и верхнее blob одинаковыми, мы можем сказать Caffe сделать "на месте" вычисление, чтобы сохранить потребление памяти.

В настоящее время я знаю, что могу безопасно использовать на месте слои "BatchNorm", "Scale" и "ReLU" (пожалуйста, дайте мне знать, если я ошибаюсь). Хотя кажется, что некоторые проблемы для других слоев (этот вопрос, кажется, является примером).

Когда использовать слои на месте в Caffe?
Как это работает с обратным распространением?

4b9b3361

Ответ 1

Как вы хорошо заметили, встроенные слои обычно не работают "из коробки".
Для некоторых слоев это довольно тривиально ("ReLU" и другие уровни активации нейронов).
Однако для других он требует специальной обработки кода. Например, в реализации слоя "PReLU" есть конкретная переменная-член bottom_memory_, в которой хранится информация, необходимая для backprop.
Вы можете увидеть аналогичный код для других слоев, которые специально проверяют на if (top[0] == bottom[0]), чтобы увидеть, используется ли этот слой в случае "на месте".

Кроме того, нет смысла иметь слой на месте, для которого вход и выход имеют разные формы, поэтому такие слои, как "Convolution", "InnerProduct", "Pool", не считаются кандидатами на "in -place".