原文地址
是来对相应的参数的初始化的过程的。进行参数的初始化是会来加快模型收敛速度的。
先从self.modules()中遍历每一层,然后判断更层属于什么类型,是否是Conv2d,
是否是BatchNorm2d,是否是Linear的,然后根据不同类型的层,设定不同的权值初始化方法
for m in self.modules(): ## 依次来返回模型中的各个层的
if isinstance(m, nn.Conv2d): ## 判断是否是相同的实例对象的。
n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
m.weight.data.normal_(0, math.sqrt(2. / n)) ## m.weight.data是对应的卷积核参数
elif isinstance(m, nn.BatchNorm2d):
m.weight.data.fill_(1) ## 对全部的权重初始化为1
m.bias.data.zero_() ## 这里是来对权重进行初始化为0