为什么SeparableConv2D比Conv2D慢?

时间:2020-03-24 18:15:37

标签: python tensorflow machine-learning keras computer-vision

我一直在尝试不同类型的卷积层,以检查它们的计算速度。一开始我的代码如下。

def conv_block_A(layer):
    block = tf.keras.layers.Conv2D(filters=128, kernel_size=3, strides=1, padding='same')(layer)
    block = tf.keras.layers.Conv2D(filters=196, kernel_size=3, strides=1, padding='same')(block)
    block = tf.keras.layers.Conv2D(filters=128, kernel_size=3, strides=1, padding='same')(block)
    block = tf.keras.layers.BatchNormalization(momentum=0.8)(block)
    block = tf.keras.layers.LeakyReLU(alpha=0.2)(block)

    return block

在浏览了一些博客之后,我将代码更改为

def conv_block_A(layer):
    block = tf.keras.layers.SeparableConv2D(filters=128, kernel_size=3, strides=1, padding='same')(layer)
    block = tf.keras.layers.SeparableConv2D(filters=196, kernel_size=3, strides=1, padding='same')(block)
    block = tf.keras.layers.SeparableConv2D(filters=128, kernel_size=3, strides=1, padding='same')(block)
    block = tf.keras.layers.BatchNormalization(momentum=0.8)(block)
    block = tf.keras.layers.LeakyReLU(alpha=0.2)(block)

    return block

在CPU上,训练过程的速度提高了一倍,但是在Tesla T4上,训练变得非常慢。可能是什么原因?

1 个答案:

答案 0 :(得分:0)

这是GPU的已知问题,已在#33836中修复。另外,您应该更新GPU驱动程序。 根据经验,在内核较大的情况下,通过可分离卷积进行加速会更明显,因为进行两次卷积的开销可能大于加速。