了解卷积层的MACC操作计数的问题

时间:2020-08-27 16:16:48

标签: tensorflow keras deep-learning flops

我有下面的代码来计算卷积层的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操作的公式。我想问一下以上函数定义中ADD的目的是什么?

   K × K × Cin × Hout × Wout × Cout 

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

使用bias时,还有一个附加的加法(+)操作。 bias向量只要在卷积层中有过滤器/通道即可。执行卷积运算后,biases are added到结果的每个通道。

因此,如果存在偏差(use_bias为True),那么您也必须计算加法运算(+)并将其添加到结果中。如果没有使用偏差,则执行0加法运算,因此将0加到结果上。