在 PyTorch 中,默认情况下如何初始化层权重和偏差?
Posted
技术标签:
【中文标题】在 PyTorch 中,默认情况下如何初始化层权重和偏差?【英文标题】:In PyTorch how are layer weights and biases initialized by default? 【发布时间】:2018-07-09 19:44:55 【问题描述】:我想知道默认情况下如何初始化层权重和偏差?例如。如果我创建线性层 火炬.nn.线性(5,100) 默认情况下,该层的权重和偏差是如何初始化的?
【问题讨论】:
【参考方案1】:PyTorch 1.0
大多数层都是使用Kaiming Uniform 方法初始化的。示例层包括线性、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)进行初始化。
如果你想覆盖默认初始化,那么see this answer。
【讨论】:
这有改变吗?我的意思是,到目前为止,Pytorch 0.3 不是这种情况吗? 是的,这在 1.0 中已更改。我已经更新了答案。【参考方案2】:权重按以下方式初始化:
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
【讨论】:
以上是关于在 PyTorch 中,默认情况下如何初始化层权重和偏差?的主要内容,如果未能解决你的问题,请参考以下文章