如何在PyTorch中初始化权重?
0 678
0

如何在PyTorch中的网络中初始化权重和偏差(例如,使用He或Xavier初始化)?

收藏
2021-02-02 10:55 更新 anna •  5042
共 1 个回答
高赞 时间
0

要初始化单层的权重,请使用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):将fn应用于每个子模块(由.children()返回)以及self。 典型的用法包括初始化模型的参数(另见torch-nn-init)。

例:

def init_weights(m):
    if type(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)

Via:https://stackoverflow.com/a/49433937/14964791

收藏
2021-02-02 11:26 更新 karry •  4540