Как обновить веса двух отдельных нейронных сетей с учетом потерь? - PullRequest
0 голосов
/ 23 марта 2020

У меня есть кодировщик и сеть прокси, которые помогают кодировщику максимизировать информацию между его входом (изображение) и выходом (вектор признаков изображения). чтобы сделать это, я использовал функцию потерь, которая оценивает MI, и оптимизатором веса обеих сетей обновляются с вычисленными потерями, но я не уверен, что это сделано правильно или нет. Я использовал следующий код (в pytorch):

# Clear the previous gradients
discriminator_net_optim.zero_grad()
encoder_net_optim.zero_grad()

autograd.backward(loss)

torch.nn.utils.clip_grad_norm_(discriminator.parameters(), 2)
torch.nn.utils.clip_grad_norm_(encoder.parameters(), 2)

# adjust weights in discriminator and encoder
discriminator_net_optim.step()
encoder_net_optim.step()

любая помощь или предложение приветствуется.

1 Ответ

1 голос
/ 24 марта 2020

Если у вас несколько сетей, это пример того, как они будут тренироваться

encoder = Encoder(args).to(device)
decoder = Decoder(args).to(device)

params = list(encoder.parameters()) + list(decoder.parameters())
optimizer = torch.optim.Adam(params, learning_rate)

И это вызывается для каждой партии:

 optimizer.zero_grad()
 loss.backward()
 optimizer.step()

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...