isinstance()
函数来判断一个对象是否是一个已知的类型,类似 type()
,但是不同之处在于: 更多请参考这篇博客。
BNNGenotypeModel
CNNGenotypeModel
,里面就override了__init__
、_hook_intermediate_feature
、forward
。 _hook_intermediate_feature
if isinstance(module, nn.Conv2d):
self.total_flops += 2* inputs[0].size(1) * outputs.size(1) * \
module.kernel_size[0] * module.kernel_size[1] * \
outputs.size(2) * outputs.size(3) / module.groups
elif isinstance(module, nn.Linear):
self.total_flops += 2 * inputs[0].size(1) * outputs.size(1)
对于biops的计算如下:
elif isinstance(module, ops.BinaryConv2d):
# 1-bit conv
self.bi_flops += 2* inputs[0].size(1) * outputs.size(1) * \
module.kernel_size * module.kernel_size * \
outputs.size(2) * outputs.size(3) / (module.groups)
forward
module.group
是啥,好像是in_channels
和out_channels
的乘积?inputs[0].size(1)
等等的具体含义。