Проблема в понимании подсчета операций MACC уровня свертки

#tensorflow #keras #deep-learning #flops

#тензорный поток #keras #глубокое обучение #провалы

Вопрос:

У меня есть приведенный ниже код для вычисления MACC сверточного слоя.

   def count_conv2d(layers, log=False):
    if log:
       print(layers.get_config())
    #number of conv operations = input_h * input_w / stride = output^2
    numshifts = int(layers.output_shape[1] * layers.output_shape[2])

    # MAC/convfilter = kernelsize^2 * InputChannels * OutputChannels
    MACperConv = layers.get_config()["kernel_size"][0] * layers.get_config()["kernel_size"][1] * 
    layers.input_shape[3] * layers.output_shape[3]
    if layers.get_config()["use_bias"]:
        ADD = layers.output_shape[3]
    else:
        ADD = 0
    return MACperConv * numshifts * 2   ADD
  

Формула для вычисления операции MACC в обзоре литературы и на онлайн-ресурсах приведена ниже. Я хотел бы спросить, какова цель ДОБАВЛЕНИЯ в приведенное выше определение функции?

    K × K × Cin × Hout × Wout × Cout 
  

Спасибо, помощь высоко ценится.

Ответ №1:

При использовании bias выполняется дополнительная операция суммирования ( ). bias Вектор задается до тех пор, пока на уровне свертки есть фильтры / каналы. После выполнения операции свертки смещения добавляются к каждому каналу результата.

Итак, если есть смещение ( use_bias верно), то вам также нужно посчитать операции сложения ( ) и добавить их к результату. Если смещение не используется, вы выполняете операцию сложения 0, поэтому вы добавляете 0 к результату.

Комментарии:

1. Привет @AndreaAngeli, почему мы считаем операции добавления в формуле, ее там нет? Не могли бы вы прояснить это для меня? Спасибо за вашу замечательную помощь.