如何解决了解卷积层的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
向量只要在卷积层中有过滤器/通道即可。执行卷积运算后,biases are added到结果的每个通道。
因此,如果存在偏差(use_bias
为True),那么您也必须计算加法运算(+)并将其添加到结果中。如果没有使用偏差,则执行0加法运算,因此将0加到结果上。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。