Conv 1x1 конфигурация для сокращения возможностей - PullRequest
0 голосов
/ 25 декабря 2018

Я использую свертку 1x1 в глубокой сети, чтобы уменьшить функцию x : Bx2CxHxW до BxCxHxW.У меня есть три варианта:

  1. x -> Conv (1x1) -> Batchnorm -> ReLU.Код будет output = ReLU(BN(Conv(x))).Ссылка resnet
  2. x -> BN -> ReLU-> Conv.Таким образом, код будет output = Conv(ReLU(BN(x))).Ссылка densenet
  3. x-> Conv.Код output = Conv(x)

Какой из них больше всего используется для сокращения возможностей?Почему?

1 Ответ

0 голосов
/ 25 декабря 2018

Поскольку вы собираетесь обучать свою сеть сквозной, какую бы конфигурацию вы ни использовали - весы будут обучены для их учета.

BatchNorm?
Iугадайте первый вопрос, который вам нужно задать себе: вы хотите использовать BatchNorm?Если ваша сеть глубока, и вы обеспокоены ковариатными сдвигами , то, вероятно, у вас должно быть BatchNorm - и здесь идет вариант №.3

BatchNorm первым?
Если ваш x является выходом другого слоя conv, то на самом деле нет никакой разницы между вашей первой и второй альтернативой: ваша сетькаскад ...- conv - bn - ReLU - conv - BN - ReLU - conv -... так что это только "искусственное" разбиение сети на триплетыфункций conv, bn, relu и вплоть до самых первых и последних функций, которые вы можете разделить вещи, как вы хотите.Более того, так как пакетная норма является линейной операцией (масштаб + смещение), ее можно «сложить» в смежный слой conv без изменения сетки, поэтому вы в основном остались с conv - relu парами.
Итак, между первыми двумя выделенными вами вариантами нет большой разницы.

Что еще нужно учитывать?
Вам действительно нужно ReLU при изменении размеров объектов?Вы можете думать о сокращающих измерениях как о линейном отображении - разложении отображений весов на x в более низкую матрицу rank , которая в конечном итоге отображается в c пространство измерений вместо 2c пространство.Если вы рассматриваете линейное отображение, то вы можете вообще пропустить ReLU.
См. быстрый RCNN SVD трюк для примера.

...