我正在建立一个神经网络,但我不知道如何访问每一层的模型权重。
我尝试过
Type '{ hAlign: string; vAlign: string; margin: string[]; }' is not assignable to type 'Pick<Pick<Pick<DetailedHTMLProps<HTMLAttributes<HTMLD...
代码:
model.input_size.weight
我期望得到重量,但是我得到了
“顺序”对象没有属性“ input_size”
答案 0 :(得分:4)
如果使用print(model)
打印出模型,则会得到
Sequential(
(0): Linear(in_features=784, out_features=128, bias=True)
(1): ReLU()
(2): Linear(in_features=128, out_features=64, bias=True)
(3): ReLU()
(4): Linear(in_features=64, out_features=10, bias=True)
(5): Softmax(dim=1) )
现在您可以访问图层的所有索引,因此可以通过model[4].weight
获得(假设)第二个线性图层的权重。
答案 1 :(得分:1)
根据pytorch官方论坛here,您可以使用
访问nn.Sequential()
中特定模块的权重。
model.layer[0].weight # for accessing weights of first layer wrapped in nn.Sequential()
答案 2 :(得分:1)
假设您将模型定义为一个类。然后就可以调用model.parameters().
`# Build a feed-forward network
class FFN(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Linear(input_size, hidden_sizes[0])
self.layer2 = nn.Linear(hidden_sizes[0], hidden_sizes[1])
self.layer3 = nn.Linear(hidden_sizes[1], output_size)
self.relu = nn.ReLU()
self.softmax = nn.Softmax(dim=1)
def forward(self, x):
x = self.relu(self.layer1(x))
x = self.relu(self.layer2(x))
x = self.softmax(self.layer3(x))
return x
model = FFN()
print(model.parameters())`
这将打印 <generator object Module.parameters at 0x7f99886d0d58>
,因此您可以立即将其传递给优化器!
但是,如果您想访问特定权重或手动查看它们,您只需转换为列表:print(list(model.parameters()))
。这将吐出一个巨大的权重列表。
但是,假设您只想要最后一层,那么您可以执行:print(list(model.parameters())[-1])
,它将打印:tensor([-0.0347, -0.0289, -0.0652, -0.1233, 0.1093, 0.1187, -0.0407, 0.0885, -0.0045, -0.1238], requires_grad=True)
答案 3 :(得分:0)
您可以使用model [0] .weight.grad显示重量
答案 4 :(得分:0)
我尝试了很多方法,似乎唯一的方法是通过传递OrderedDict
from collections import OrderedDict
model = nn.Sequential(OrderedDict([
('fc1', nn.Linear(input_size, hidden_sizes[0])),
('relu1', nn.ReLU()),
('fc2', nn.Linear(hidden_sizes[0], hidden_sizes[1])),
('relu2', nn.ReLU()),
('output', nn.Linear(hidden_sizes[1], output_size)),
('softmax', nn.Softmax(dim=1))]))
因此,要访问每个图层的权重,我们需要使用其自己的唯一图层名称来调用它。
例如访问第1层model.fc1.weight
的权重
Parameter containing:
tensor([[-7.3584e-03, -2.3753e-02, -2.2565e-02, ..., 2.1965e-02,
1.0699e-02, -2.8968e-02],
[ 2.2930e-02, -2.4317e-02, 2.9939e-02, ..., 1.1536e-02,
1.9830e-02, -1.4294e-02],
[ 3.0891e-02, 2.5781e-02, -2.5248e-02, ..., -1.5813e-02,
6.1708e-03, -1.8673e-02],
...,
[-1.2596e-03, -1.2320e-05, 1.9106e-02, ..., 2.1987e-02,
-3.3817e-02, -9.4880e-03],
[ 1.4234e-02, 2.1246e-02, -1.0369e-02, ..., -1.2366e-02,
-4.7024e-04, -2.5259e-02],
[ 7.5356e-03, 3.4400e-02, -1.0673e-02, ..., 2.8880e-02,
-1.0365e-02, -1.2916e-02]], requires_grad=True)