PyTorch_Tutorial
PyTorch_Tutorial copied to clipboard
模型权重初始化并非小随机数,使用的是kaiming初始化
0.0.4版本第26页处,您写道:
其实,在创建网络实例的过程中, 一旦调用 nn.Conv2d 的时候就会有对权值进行初始化 Conv2d 是继承_ConvNd,初始化赋值是在_ConvNd当中,这些值是创建一个 Tensor 时得到的,是一些很小的随机数。
实际上,并非如此,在pytorch源码中使用的是kaiming初始化,也就是说,pytorch的模型权值初始化不是很小的随机数。
参见: https://github.com/pytorch/pytorch/blob/6e453e56f991d43ff9d0eac715020b7ef877ca77/torch/nn/modules/conv.py#L43
https://github.com/pytorch/pytorch/blob/6e453e56f991d43ff9d0eac715020b7ef877ca77/torch/nn/modules/conv.py#L45
您说的正确,我那里确实弄错了,默认初始值的设置是在_ConvNd类中的 --> self.reset_parameters() ---> def reset_parameters(self) ---> self.weight.data.uniform_(-stdv, stdv)
不过我发现我这个版本的pytorch采用的是均匀分布,不知从哪个版本之后修改成了kaiming初始化。如果以后有需要,就从 torch/nn/modules/conv.py 中 reset_parameters(self)函数去查找。