torch.nn.Linear()中weight的初始化问题

1. 系统默认初始化

当我们没有进行初始化权重操作时,发现系统已经有了默认值,如下所示
torch.nn.Linear()中weight的初始化问题_第1张图片
查看官网文档可以发现,这些初始化的值服从均匀分布 U(- k \sqrt{k} k , k \sqrt{k} k ),其中k = 1/输入层
torch.nn.Linear()中weight的初始化问题_第2张图片

2. 自定义初始化weight

首先编写初始化函数init_weight(),在该函数中,nn.init.normal()可以将权重初始化为正态分布,此处也可以初始化为其他值。

# 初始化weight
def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)

#编写网络层结构        
net = nn.Sequential(nn.Flatten(),
                    nn.Linear(784, 256),
                    nn.ReLU(),
                    nn.Linear(256, 10))
# 将网络中的weight进行初始化
net.apply(init_weights);

你可能感兴趣的:(深度学习,深度学习,pytorch,神经网络)