почему SeparableConv2D медленнее, чем Conv2D? - PullRequest
0 голосов
/ 24 марта 2020

Я экспериментировал с различными типами слоев свертки, чтобы проверить их вычислительные скорости. вначале мой код был следующим:

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

, процесс обучения на процессорах стал в два раза быстрее Но на Tesla T4 обучение стало очень медленным. в чем может быть причина?

1 Ответ

0 голосов
/ 24 марта 2020

Это известная проблема с графическими процессорами, она была исправлена ​​в # 33836 . Также вам следует обновить драйвер GPU. Как правило, при больших размерах ядра ускорение с помощью раздельной свертки более заметно, поскольку издержки, связанные с выполнением двух сверток, могут быть больше, чем ускорения.

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