【问题标题】:In PyTorch how are layer weights and biases initialized by default?在 PyTorch 中,默认情况下如何初始化层权重和偏差?
【发布时间】:2018-07-09 19:44:55
【问题描述】:

我想知道默认情况下如何初始化层权重和偏差?例如。如果我创建线性层 火炬.nn.线性(5,100) 默认情况下,该层的权重和偏差是如何初始化的?

【问题讨论】:

    标签: python deep-learning pytorch


    【解决方案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.10.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

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2018-09-23
      • 1970-01-01
      • 2018-06-23
      • 2021-11-07
      相关资源
      最近更新 更多