model.named_parameters() und model.parameters() in Pytorch

Referenzlink: https://www.cnblogs.com/yqpy/p/12585331.html

model.named_parameters()

Beim iterativen Drucken model.named_parameters() werden der Name und der Parameter jedes Iterationselements gedruckt.

model = DarkNet([1, 2, 8, 8, 4])
for name, param in model.named_parameters():
    print(name,param.requires_grad)
    param.requires_grad = False

Die Ausgabe ist

conv1.weight True
bn1.weight True
bn1.bias True
layer1.ds_conv.weight True
layer1.ds_bn.weight True
layer1.ds_bn.bias True
layer1.residual_0.conv1.weight True
layer1.residual_0.bn1.weight True
layer1.residual_0.bn1.bias True
layer1.residual_0.conv2.weight True
layer1.residual_0.bn2.weight True
layer1.residual_0.bn2.bias True
layer2.ds_conv.weight True
layer2.ds_bn.weight True
layer2.ds_bn.bias True
layer2.residual_0.conv1.weight True
layer2.residual_0.bn1.weight True
layer2.residual_0.bn1.bias True
....

Und Sie können das trainierbare Attribut des Parameters ändern. Der erste Ausdruck ist True, beim zweiten Mal ist er False

model.parameters()

Iteratives Drucken model.parameters() gibt den Parameter jedes Iterationselements aus, ohne den Namen auszugeben. Dies ist der Unterschied zwischen ihm und benannten_parametern, die beide zum Ändern des Attributs von require_grad verwendet werden können.

for index, param in enumerate(model.parameters()):
    print(param.shape)

Die Ausgabe ist

torch.Size([32, 3, 3, 3])
torch.Size([32])
torch.Size([32])
torch.Size([64, 32, 3, 3])
torch.Size([64])
torch.Size([64])
torch.Size([32, 64, 1, 1])
torch.Size([32])
torch.Size([32])
torch.Size([64, 32, 3, 3])
torch.Size([64])
torch.Size([64])
torch.Size([128, 64, 3, 3])
torch.Size([128])
torch.Size([128])
torch.Size([64, 128, 1, 1])
torch.Size([64])
torch.Size([64])
torch.Size([128, 64, 3, 3])
torch.Size([128])
torch.Size([128])
torch.Size([64, 128, 1, 1])
torch.Size([64])
torch.Size([64])
torch.Size([128, 64, 3, 3])
torch.Size([128])
torch.Size([128])
torch.Size([256, 128, 3, 3])
torch.Size([256])
torch.Size([256])
torch.Size([128, 256, 1, 1])
....

Kombinieren Sie die beiden zur Iteration mit gleichzeitigem Index, Netzwerkschichtnamen und Parametern

	for index, (name, param) in zip(enumerate(model.parameters()), model.named_parameters()):
		print(index[0])
		print(name, param.shape)

Die Ausgabe ist

0
conv1.weight torch.Size([32, 3, 3, 3])
1
bn1.weight torch.Size([32])
2
bn1.bias torch.Size([32])
3
layer1.ds_conv.weight torch.Size([64, 32, 3, 3])
4
layer1.ds_bn.weight torch.Size([64])
5
layer1.ds_bn.bias torch.Size([64])
6
layer1.residual_0.conv1.weight torch.Size([32, 64, 1, 1])
7
layer1.residual_0.bn1.weight torch.Size([32])
8
layer1.residual_0.bn1.bias torch.Size([32])
9
layer1.residual_0.conv2.weight torch.Size([64, 32, 3, 3])

 

Guess you like

Origin blog.csdn.net/weixin_42149550/article/details/117128228