如何查询PyTorch各层默认初始化规则?以1.9.0版本Conv2d等层为例
官方依据获取渠道
- PyTorch对应版本的官方API文档:每个
torch.nn下的层文档都会明确标注其默认初始化策略,你可以直接检索对应版本、对应层的文档说明获取官方说明。 - PyTorch对应版本的源代码:所有层的初始化逻辑都写在类的
__init__方法末尾调用的reset_parameters函数中,你可以直接查看对应版本的源码确认初始化规则,这是最准确的依据。
PyTorch 1.9.0版本指定层默认初始化规则
torch.nn.Conv2d
Conv2d的初始化逻辑继承自父类_ConvNd,和Linear层一致,默认采用*Kaiming Uniform(何恺明均匀分布)*初始化:
- 权重参数:调用
torch.nn.init.kaiming_uniform_实现,计算增益时采用leaky_relu作为对应非线性激活,负斜率设置为sqrt(5) - 偏置参数:如果开启偏置,会从均匀分布
U(-bound, bound)中采样,bound的取值和输入特征通道数的平方根负相关,具体计算逻辑可参考源码中reset_parameters方法的实现。
torch.nn.BatchNorm2d
BatchNorm2d的初始化逻辑和卷积、全连接层不同,默认规则如下:
- 可训练权重(gamma参数):默认初始化为常数1
- 可训练偏置(beta参数):默认初始化为常数0
- 运行时统计量(滑动均值、滑动方差):属于训练过程中累积的非训练参数,初始值分别为0和1。
内容的提问来源于stack exchange,提问作者Imahn
相关产品推荐
相关产品推荐

