【发布时间】:2018-07-09 19:44:55
【问题描述】:
我想知道默认情况下如何初始化层权重和偏差?例如。如果我创建线性层 火炬.nn.线性(5,100) 默认情况下,该层的权重和偏差是如何初始化的?
【问题讨论】:
标签: python deep-learning pytorch
我想知道默认情况下如何初始化层权重和偏差?例如。如果我创建线性层 火炬.nn.线性(5,100) 默认情况下,该层的权重和偏差是如何初始化的?
【问题讨论】:
标签: python deep-learning pytorch
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。
【讨论】:
权重按以下方式初始化:
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
【讨论】: