Влияет ли заполнение и расширение на количество FLOP в сверточном слое? - PullRequest
0 голосов
/ 14 февраля 2019

Насколько мне известно, только размер вывода, размер ядра, количество входных каналов, количество выходных каналов и размер пакета влияют на количество FLOP в сверточном слое.

Но некоторые люди говорили мне, что дополнение и расширение также влияют на FLOP.

Это правда?Если это правда, почему?

1 Ответ

0 голосов
/ 14 февраля 2019

Заполнение напрямую изменяет размер ввода, поэтому ядро ​​должно сворачиваться с большим количеством входных значений, что приводит к увеличению числа FLOP.

Расширение более интересно: количество операций не изменяется при увеличенииЭто.Однако сверточное ядро ​​становится больше и меньше операций подходит для ввода.Таким образом, количество FLOP уменьшается.В этом смысле расширение является аналогом заполнения.

Вы можете увидеть, как параметры заполнения и расширения изменяют количество MACC (множественное накопление = 2FLOP), используя Анализатор Netscope CNN .

Например, конфигурация по умолчанию:

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { 
    shape: { dim: 1 dim: 3 dim: 227 dim: 227 } 
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  convolution_param {
    num_output: 96
    kernel_size: 3
  }
}

оценивается в 131,22 млн. MACC.С pad: 1 («тот же» отступ) это 133,56M.С dilation: 2 только становится 128,9M.Но если вы компенсируете расширение расширением:

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { 
    shape: { dim: 1 dim: 3 dim: 227 dim: 227 } 
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  convolution_param {
    num_output: 96
    kernel_size: 3
    dilation: 2
    pad: 1
  }
}

, то снова 131,22M.

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