理解卷积层 MACC 运算计数的问题
Issue in understanding the counting of MACC operations of convolution layer
我有以下用于计算卷积层 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
谢谢,非常感谢您的帮助。
使用bias
时,多了一个求和(+)运算。 bias
向量只要卷积层中有filters/channels个即可。执行卷积运算后,biases are added到每个通道的结果。
所以如果存在偏差(use_bias
为 True),那么您也必须计算加法运算 (+) 并将它们添加到结果中。如果没有使用偏差,则执行0加法运算,因此将结果加0。
我有以下用于计算卷积层 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
谢谢,非常感谢您的帮助。
使用bias
时,多了一个求和(+)运算。 bias
向量只要卷积层中有filters/channels个即可。执行卷积运算后,biases are added到每个通道的结果。
所以如果存在偏差(use_bias
为 True),那么您也必须计算加法运算 (+) 并将它们添加到结果中。如果没有使用偏差,则执行0加法运算,因此将结果加0。