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

  • Post author:
  • Post category:其他

1. 系统默认初始化

当我们没有进行初始化权重操作时,发现系统已经有了默认值,如下所示
在这里插入图片描述
查看官网文档可以发现,这些初始化的值服从均匀分布 U(-

k

\sqrt{k}

k
,

k

\sqrt{k}

k
),其中k = 1/输入层
在这里插入图片描述

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);

版权声明:本文为qq_48081509原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。