Pytorch网络参数初始化@Elaine
神经网络的初始化是训练流程的重要基础环节,会对模型的性能、收敛性、收敛速度等产生重要影响。
Pytorch中常见的两种初始化操作
(1)使用pytorch内置的 torch.nn.init
方法
正态分布、均匀分布、xavier初始化、kaiming初始化都已经实现,可以直接使用。具体详见PyTorch 中 torch.nn.init 中文文档。
init.xavier_uniform(net1[0].weight)
(2) Numpy
对于自定义的初始化方法,有时tensor的功能不如numpy强大灵活,故可以借助numpy实现初始化方法,再转换到tensor上使用。
for layer in net1.modules():
if isinstance(layer, nn.Linear): # 判断是否是线性层
param_shape = layer.weight.shape
layer.weight.data = torch.from_numpy(np.random.normal(0, 0.5, size=param_shape))
# 定义为均值为 0,方差为 0.5 的正态分布