fuse()函数的conv_b的疑惑
您好,请问conv_b为何等于这个数值?
融合卷积层和BN层的新的卷积层的偏置按照第二个式子那样的话,似乎和您这个代码中的差了个负号

然后还有
这个running_mean相加也不是很理解。
这块的思路是:能将原有分支和reserving分支合并的是conv层,但是正常resnet的求和是在bn层后的。因此我训练时用running2测一测求和后的均值方差,部署时将bn的乘法与前面的conv层合并,bn层的加法放到running2处进行。 最后一层bn层的处理比前面bn层要更复杂一点,可以慢慢体会下。
请问在conv_w部分,为什么要在最后要加上[1] * (len(conv_w.shape) - 1)
@ayoggchen
是为了将bn_w与bn_var_sqrt相乘后的结果reshape成 [-1,1,1,1] 的形状,也就是[输出通道数, 1, 1, 1]
方便下一步与conv_w相乘
@ayoggchen
是为了将bn_w与bn_var_sqrt相乘后的结果reshape成 [-1,1,1,1] 的形状,也就是[输出通道数, 1, 1, 1] 方便下一步与conv_w相乘
明白,另外想确认一下,如果任务不需要bn层,是不是不需要做fuse的操作,直接将卷积赋值成diract和原值组合就可以了?
还想问一下,为什么在rmrepse.py中,对up.bias的初始化需要添加一个100的常量呢?
@ayoggchen
是为了将bn_w与bn_var_sqrt相乘后的结果reshape成 [-1,1,1,1] 的形状,也就是[输出通道数, 1, 1, 1] 方便下一步与conv_w相乘
@ayoggchen
是为了将bn_w与bn_var_sqrt相乘后的结果reshape成 [-1,1,1,1] 的形状,也就是[输出通道数, 1, 1, 1] 方便下一步与conv_w相乘
明白,另外想确认一下,如果任务不需要bn层,是不是不需要做fuse的操作,直接将卷积赋值成diract和原值组合就可以了?
是的,不用bn层会简单很多,只是在finetune的时候效果就会不好,只用来测试是没问题的。