参数初始化的目的是限定网络权重参数的初始分布,试图让权重参数更接近参数空间的最优解,从而加速训练。pytorch中网络默认初始化参数为随机均匀分布,设定额外的参数初始化并非总能加速训练。
1,模板
在训练开始对指定层的权重或偏置初始化:
def weight_init(m):
if isinstance(m, (nn.Conv2d, nn.Linear)):
nn.init.kaiming_normal_(m.weight)
elif isinstance(m, nn.BatchNorm2d):
m.weigth.data.fill_(1)
m.bias.data.zero_()
model.apply(weight_init)
2,pytorch自带的参数初始化方法
torch.nn.init.
uniform(tensor, a=0, b=1) 均匀分布,下限a,上限b
normal(tensor, mean=0, std=1)正态分布
constant(tensor, val)常数值
xavier_uniform(w, gain=math.sqrt(2.0))
xavier_normal(tensor, gain=1)
kaiming_uniform(tensor, a=0, mode=‘fan_in’)
kaiming_normal(tensor, a=0, mode=‘fan_in’)
orthogonal(tensor, gain=1)正交矩阵