pytorch学习:初始化权重并对整个网络的参数进行初始化

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层都初始化权重. 

猜你喜欢

转载自blog.csdn.net/CV_YOU/article/details/81543891
今日推荐