在网络的训练过程中如何查看optimizer的参数?

##在网络的训练过程中如何查看optimizer的参数?
optimizer.param_groups是一个列表,列表中的元素是一个个字典

###如果你的optimizer这样写:

optimizer = torch.optim.Adam(cnn.parameters())
那么optimizer.param_groups是包含一个字典的列表。
可以通过optimizer.param_groups[0]取出这个字典,可以看下它包含哪些参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{'betas': (0.9, 0.999),
'eps': 1e-08,
'lr': 0.001,
'params': [Parameter containing:
(0 ,0 ,.,.) =
-0.0116 0.0621 -0.0300 -0.1113 -0.0077
0.0339 0.0730 -0.1948 0.0330 -0.0886
-0.0476 0.0123 -0.1204 -0.1775 0.0321
0.1862 -0.0613 -0.1309 -0.1461 -0.1497
-0.0738 0.1986 -0.0223 -0.0217 -0.0191

...

(15,0 ,.,.) =
-0.1605 0.1760 -0.0950 0.0716 -0.0603
0.1547 -0.1716 0.1406 0.0155 0.1417
-0.0405 -0.1392 -0.1946 0.1510 -0.0985
-0.1094 -0.0099 0.0079 -0.1506 0.1812
0.0217 -0.0062 0.1246 0.0715 0.1031
[torch.cuda.FloatTensor of size 16x1x5x5 (GPU 0)]
],
'weight_decay': 0}

可以看出,有betas, eps, lr, paras, weight_decay。
因此如果训练过程中想查看lr,只需optimizer.param_groups[0]['lr']即可,查看其他参数类似。

前面讲过一个adam可以设置不同的学习率和其他的参数,如

1
2
3
4
5
6
7
8
optimizer = torch.optim.Adam([{'params':cnn.layer1.parameters()},
{'params':cnn.layer2.parameters(), 'lr': 0.01, 'weight_decay':1e-4}], lr=0.001)

这个时候`optimizer.param_groups`为包含两个字典的列表,分别为不同层的参数

optimizer.param_groups[0]则是cnn.layer1的参数,那么optimizer.param_groups[0]['lr']即0.001

optimizer.param_groups[1]则是cnn.layer2的参数,那么optimizer.param_groups[1]['lr']即0.01