如何通过例如He或Xavier初始化来初始化网络的权重和偏置?
回答:
单层
要初始化单层的权重,请使用来自torch.nn.init
的函数。例如:
conv1 = torch.nn.Conv2d(...)torch.nn.init.xavier_uniform(conv1.weight)
或者,您可以通过写入conv1.weight.data
(这是一个torch.Tensor
)来修改参数。示例:
conv1.weight.data.fill_(0.01)
对于偏置也是同样适用的:
conv1.bias.data.fill_(0.01)
nn.Sequential
或自定义nn.Module
将初始化函数传递给torch.nn.Module.apply
。它将递归地初始化整个nn.Module
中的权重。
apply(fn): 递归地对每个子模块(由
.children()
返回)以及自身应用fn
。典型用途包括初始化模型的参数(另见torch-nn-init)。
示例:
def init_weights(m): if isinstance(m, nn.Linear): torch.nn.init.xavier_uniform(m.weight) m.bias.data.fill_(0.01)net = nn.Sequential(nn.Linear(2, 2), nn.Linear(2, 2))net.apply(init_weights)