Разница между DepthwiseConv2D и SeparableConv2D - PullRequest
3 голосов
/ 26 июня 2019

Из документа я знаю, SeparableConv2D - это комбинация операций по глубине и по точкам. Тем не менее, когда я звоню

SeparableConv2D(100, 5, input_shape=(416,416,10) 

# total parameters is 1350

model.add(DepthwiseConv2D(5, input_shape=(416,416,10)))
model.add(Conv2D(100, 1))

# total parameters is 1360

Означает ли это, что SeparableConv2D не использует смещение в фазе глубины по умолчанию?

Спасибо.

1 Ответ

2 голосов
/ 26 июня 2019

Правильно, проверка исходного кода (я сделал это для tf.keras, но я полагаю, что это то же самое для автономного keras) показывает, что в SeparableConv2D отделимая свертка работает с использованием только фильтров, без смещений и одиночный вектор смещения добавляется в конце. Вторая версия, с другой стороны, имеет смещения как для DepthwiseConv2D, так и для Conv2D.

Учитывая, что свертка является линейной операцией, и вы не используете нелинейность между глубиной и сверткой 1x1, я бы предположил, что в этом случае не нужно иметь два смещения, аналогично тому, как вы не используете смещения в слое, который сопровождается нормализацией партии, например. Таким образом, дополнительные 10 параметров на самом деле не улучшат модель (и при этом они не должны причинить вреда).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...