赞
踩
在深度学习模型训练中,权重初始值极为重要,一个好的初始值会使得模型收敛速度提高,使模型准确率更准确,一般情况下,我们不使用全零初始值训练网络,为了利于训练和减少收敛时间,我们需要对模型进行合理的初始化, P y t o r c h Pytorch Pytorch也在 t o r c h . n n . i n i t torch.nn.init torch.nn.init中为我们提供了常用的初始化方法,通过本章学习,你将学习到以下内容。
我们发现初始化模块提供了以下的初始化方法:
def initialize_weights(self):
for m in self.modules():
# 判断是否属于Conv2d
if isinstance(m, nn.Conv2d):
torch.nn.init.xavier_normal_(m.weight.data)
# 判断是否有偏置
if m.bias is not None:
torch.nn.init.constant_(m.bias.data,0.3)
elif isinstance(m, nn.Linear):
torch.nn.init.normal_(m.weight.data, 0.1)
if m.bias is not None:
torch.nn.init.zeros_(m.bias.data)
elif isinstance(m, nn.BatchNorm2d):
m.weight.data.fill_(1)
m.bias.data.zeros_()
# 模型的定义 class MLP(nn.Module): # 声明带有模型参数的层,这里声明了两个全连接层 def __init__(self, **kwargs): # 调用MLP父类Block的构造函数来进行必要的初始化。这样在构造实例时还可以指定其他函数 super(MLP, self).__init__(**kwargs) self.hidden = nn.Conv2d(1,1,3) self.act = nn.ReLU() self.output = nn.Linear(10,1) # 定义模型的前向计算,即如何根据输入x计算返回所需要的模型输出 def forward(self, x): o = self.act(self.hidden(x)) return self.output(o) mlp = MLP() print(list(mlp.parameters())) print("-------初始化-------") initialize_weights(mlp) print(list(mlp.parameters()))
慢慢的会自己编写初始化模块,将初始化,全部都将其搞透彻,。
了解一个模型架构需要那些函数,以及那些模块,会自己将其搞清楚。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。