PyTorch 模型层权重如何被隐式初始化? [复制]

Posted

技术标签:

【中文标题】PyTorch 模型层权重如何被隐式初始化? [复制]【英文标题】:How PyTorch model layer weights get initialized implicitly? [duplicate] 【发布时间】:2021-04-12 20:03:48 【问题描述】:

我基本上用 PyTorch 定义了一个带有 Conv2D 和线性层的模型,并用一个样本数据集对其进行了训练。该模型似乎运行并收敛。但我想知道我没有明确初始化模型层权重(正常或 Xavier)。这是否意味着当我在每个 epoch 训练之前调用 model.train() 时,默认情况下层权重会随机初始化?如果是这样,我怎样才能显式更改初始化的类型?

【问题讨论】:

这能回答你的问题吗? In PyTorch how are layer weights and biases initialized by default? 【参考方案1】:

初始化的类型取决于层。您可以从reset_parameters 方法或文档中检查它。

对于线性层和卷积层,都是 He 初始化 (torch.nn.init.kaiming_uniform_)。

在文档中提到

这些值从U(−sqrt(k),sqrt(k))初始化。

对于嵌入层,它是正常的初始化。 (在文档中提到 N(0,1))。


您可以更改How to initialize weights in PyTorch? 中提到的初始化类型。

conv1 = torch.nn.Conv2d(...)
torch.nn.init.xavier_uniform(conv1.weight)

【讨论】:

以上是关于PyTorch 模型层权重如何被隐式初始化? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PyTorch 在预训练模型上添加新层? (给出了 Keras 示例。)

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

PyTorch初始化网络各层权重

PyTorch初始化网络各层权重

如何在 Keras 中重新初始化现有模型的层权重?

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