答:利用model.named_parameters()函数查可以查看网络权重参数。代码如下所示。
首先,我们要定义一个神经网络,如下所示:
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.nn1 = nn.Linear(2, 3)
self.nn2 = nn.Linear(3, 6)
def forward(self, x):
x = F.relu(self.nn1(x))
return F.relu(self.nn2(x))
接着,我们可以通过model.named_parameters()
函数查看一下这个网络内部的权重的名称和内部参数是什么。
model = MyModel()
for name, param in model.named_parameters():
print(name)
print("-" * 24)
print(param)
print("=" * 24)
结果如下所示:
nn1.weight
------------------------
Parameter containing:
tensor([[ 0.4568, 0.2095],
[-0.6798, 0.1150],
[-0.6007, -0.0654]], requires_grad=True)
========================
nn1.bias
------------------------
Parameter containing:
tensor([-0.2651, 0.1305, 0.4654], requires_grad=True)
========================
nn2.weight
------------------------
Parameter containing:
tensor([[-0.1951, -0.1204, 0.1378],
[-0.1610, -0.4839, -0.0099],
[ 0.3376, -0.1957, 0.5075],
[-0.1851, -0.2538, -0.0336],
[ 0.5438, -0.1405, -0.1241],
[ 0.4294, 0.0081, -0.2110]], requires_grad=True)
========================
nn2.bias
------------------------
Parameter containing:
tensor([-0.5548, 0.1145, 0.1029, -0.2623, -0.0360, -0.0181],
requires_grad=True)
========================
答:named_parameters()返回一个list列表,其内部元素为元组,每个元组打包了2个内容,分别是layer-name和layer-param。其中,layer-name用的字面量。