我想知道层权重和偏差默认是如何初始化的?例如,如果我创建一个线性层torch.nn.Linear(5,100),那么这个层的权重和偏差会如何被默认初始化?
我想知道层权重和偏差默认是如何初始化的?例如,如果我创建一个线性层torch.nn.Linear(5,100),那么这个层的权重和偏差会如何被默认初始化?
PyTorch 1.0
大多数层使用 Kaiming Uniform方法进行初始化。示例层包括Linear、Conv2d、RNN等。如果您使用其他层,请在this doc中查找该层。如果它说权重使用U(...)
初始化,则使用的是Kaiming Uniform方法。偏置使用LeCunn init,即uniform(-std,std)
进行初始化,其中标准差std是1/sqrt(fan_in)
(code)。
PyTorch 0.4.1, 0.3.1
权重和偏置使用LeCunn init进行初始化(参见第4.6节)用于卷积层(代码:0.3.1,0.4.1)。
如果您想覆盖默认的初始化,则请参阅此答案。
def reset_parameters(self):
stdv = 1. / math.sqrt(self.weight.size(1))
self.weight.data.uniform_(-stdv, stdv)
if self.bias is not None:
self.bias.data.uniform_(-stdv, stdv)
https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/linear.py#L48-L52