В Pytorch отсутствуют параметры оптимизатора - PullRequest
0 голосов
/ 29 октября 2019

У меня есть 2 сети, которые используют один оптимизатор с разной скоростью обучения. Простой код, показанный ниже:

optim = torch.optim.Adam([
{'params': A.parameters(), 'lr': args.A},
{'params': B.parameters(), 'lr': args.B}])

Это правильно? Я спрашиваю об этом, потому что, когда я проверяю параметры в оптимизаторе (используя код ниже), я нашел только 2 параметра.

for p in optim.param_groups:
outputs = ''
for k, v in p.items():
    if k is 'params':
        outputs += (k + ': ' + str(v[0].shape).ljust(30) + ' ')
    else:
        outputs += (k + ': ' + str(v).ljust(10) + ' ')
print(outputs)

Печатается только 2 параметра:

params: torch.Size([16, 1, 80])        lr: 1e-05      betas: (0.9, 0.999) eps: 1e-08      weight_decay: 0          amsgrad: False

params: torch.Size([30, 10])           lr: 1e-05      betas: (0.9, 0.999) eps: 1e-08      weight_decay: 0          amsgrad: False

На самом деле, 2 сетииметь более 100 параметров. Я думал, что все параметры будут напечатаны. Почему это происходит? Спасибо!

1 Ответ

1 голос
/ 29 октября 2019

Вы печатаете только первый тензор каждой группы параметров:

if k is 'params':
    outputs += (k + ': ' + str(v[0].shape).ljust(30) + ' ')  # only v[0] is printed!

Попробуйте распечатать все параметры:

if k is 'params':
    outputs += (k + ': ')
    for vp in v:
        outputs += (str(vp.shape).ljust(30) + ' ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...