Pytorch初始化方法

常用初始化方法

PyTorch 中提供了 10 中初始化方法

3、nn.init.kaiming_normal_(m.weight.data)

5、用均匀分布的值填充输入张量, 参数a:均匀分布的下界, 默认为0.; 参数b:均匀分布的上界, 默认为1
uniform_weights = nn.init.uniform_(weights, a=0., b=1.)

6、用正太分布的值填充输入张量, 参数mean:正态分布的均值, 默认为0.; 参数std:正态分布的方差, 默认为1.

normal_weights = nn.init.normal_(weights, mean=0., std=1.)

7、用常数值填充输入张量, 参数val:要填充的常数.

constant_weights = nn.init.constant_(weights, val=2)

用常数1.填充输入张量
ones_weights = nn.init.ones_(weights)

用常数0.填充输入张量
zeros_weights = nn.init.zeros_(weights)

  1. 在__init__()方法中遍历self.modules()来获取模型中的每一层,然后使用 isinstance()方法对特定层的weights和bias使用特定的初始化方法。对于使用relu激活的卷积层,通常用’kaiming’初始化卷积层参数;比如:

for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode=’fan_out’, nonlinearity=’relu’)
elif isinstance(m, nn.BatchNorm2d):
nn.init.constant_(m.weight, 1)
nn.init.constant_(m.bias, 0)

  1. 或者先写好初始化函数,然后使用apply()方法进行模型初始化:

def weights_init(m):
if isinstance(m, nn.Conv2d):
nn.init.xavier_normal_(m.weight.data)
nn.init.xavier_normal_(m.bias.data)
elif isinstance(m, nn.BatchNorm2d):
nn.init.constant_(m.weight,1)
nn.init.constant_(m.bias, 0)

model.apply(weights_init)

Original: https://blog.csdn.net/JNash/article/details/122687634
Author: JNash
Title: Pytorch初始化方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/651490/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球