假设我有一个nn.Sequential
块,它有两个线性层。我希望通过均匀分布来初始化第一层的权重,但希望将第二层的权重初始化为常量2.0。
net = nn.Sequential()
net.add_module('Linear_1', nn.Linear(2, 5, bias = False))
net.add_module('Linear_2', nn.Linear(5, 5, bias = False)
发布于 2019-05-27 05:20:27
有一种方法可以做到这一点:
import torch
import torch.nn as nn
net = nn.Sequential()
ll1 = nn.Linear(2, 5, bias = False)
torch.nn.init.uniform_(ll1.weight, a=0, b=1) # a: lower_bound, b: upper_bound
net.add_module('Linear_1', ll1)
print(ll1.weight)
ll2 = nn.Linear(5, 5, bias = False)
torch.nn.init.constant_(ll2.weight, 2.0)
net.add_module('Linear_2', ll2)
print(ll2.weight)
print(net)
输出:
Parameter containing:
tensor([[0.2549, 0.7823],
[0.3439, 0.4721],
[0.0709, 0.6447],
[0.3969, 0.7849],
[0.7631, 0.5465]], requires_grad=True)
Parameter containing:
tensor([[2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2.]], requires_grad=True)
Sequential(
(Linear_1): Linear(in_features=2, out_features=5, bias=False)
(Linear_2): Linear(in_features=5, out_features=5, bias=False)
)
发布于 2019-08-26 20:00:42
在你定义了你的模块之后,你可以这样做,例如:
torch.nn.init.constant_(net.Linear_1.weight, 0.0)
torch.nn.init.xavier_normal_(net.Linear_2.weight)
用于使用不同类型的初始化来初始化不同的层。
https://stackoverflow.com/questions/56312886
复制相似问题