pytorch的几种权重初始化方式:
PyTorch提供了多种参数初始化函数:
torch.nn.init.constant(tensor, val)
torch.nn.init.normal(tensor, mean=0, std=1)
torch.nn.init.xavier_uniform(tensor, gain=1)
上面的初始化函数的参数tensor,虽然写的是tensor,但是也可以是Variable类型的,这里的tensor有维度:
比如产生一个tensor:
W= torch.FloatTensor(1, 3, 256, 256)
对网络的某一层参数进行初始化:
self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3)
init.xavier_uniform(self.conv1.weight)
init.constant(self.conv1.bias, 0.1)
对网络的整体进行初始化:
def weights_init(m):
classname=m.__class__.__name__
if classname.find('Conv') != -1:
xavier(m.weight.data)
xavier(m.bias.data)
net = Net()#构建网络
net.apply(weights_init) #apply函数会递归地搜索网络内的所有module并把参数表示的函数应用到所有的module上。
#对所有的Conv层都初始化权重.

本文介绍了PyTorch中实现的几种权重初始化方法,包括常数初始化、正态分布初始化及Xavier均匀分布初始化等,并提供了具体的代码实例来展示如何对单个层或整个网络进行初始化。
399

被折叠的 条评论
为什么被折叠?



