DepthwiseConv2D 和 SeparableConv2D 的区别

mic*_*liu 8 keras

从文档中,我知道SeparableConv2D是depthwise 和pointwise 操作的组合。然而,当我打电话

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
Run Code Online (Sandbox Code Playgroud)

这是否意味着SeparableConv2D默认情况下不使用深度阶段的偏差?

谢谢。

xdu*_*ch0 4

正确,检查源代码(我这样做是为了tf.keras,但我认为独立的情况是相同的keras)表明,在 中SeparableConv2D,可分离卷积仅使用过滤器,没有偏差,并且在末尾添加了单个偏差向量。另一方面,第二个版本对DepthwiseConv2D和都有偏见Conv2D

鉴于卷积是一种线性运算,并且您在深度卷积和 1x1 卷积之间没有使用非线性,我认为在这种情况下没有必要有两个偏差,类似于您在后面的层中不使用偏差的方式例如,批量归一化。因此,额外的 10 个参数实际上不会改进模型(也不应该真正造成损害)。