在 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 中,默认情况下如何初始化层权重和偏差?的主要内容,如果未能解决你的问题,请参考以下文章

pytorch 中 conv 的默认权重初始化器是啥?

pytorch卷积层中的第一个初始化权重是啥

PyTorch初始化网络各层权重

PyTorch初始化网络各层权重

如何在Tensorflow Object Detection API中初始化卷积层的权重?

在 pytorch 中修改预训练模型时,旧的权重会重新初始化吗?