最近需要用到VGG16BN模型,便于需求,自拟了模型,没有使用官方源码,这导致在加载参数过程中遇到一些问题:
1.自拟的模型中BN层出现了一个权重文件中没有的参数 :track_running_stats:
nn.BatchNorm2d(channels, eps=1e-05, momentum=0.1, affine=False, track_running_stats=True)
这个参数能够:
①训练时统计forward过的min-batch数目,每经过一个min-batch, track_running_stats+=1;
②如果没有指定momentum, 则使用1/num_batches_tracked 作为因数来计算均值和方差(running mean and variance).
【如下所示】
class _BatchNorm(_NormBase):
def __init__(
self,
num_features,
eps=1e-5,
momentum=0.1,
## 如果不为None,会执行track_running_stats+1;如果是None,则执行通过t_r_s计算momentum
affine=True,
track_running_stats=True,
device=None,
dtype=None
):
factory_kwargs = {'device': device, 'dtype': dtype}