Train both two models

Hi, all
I want to train both encoder and discriminator.
(Image -> Encoder -> Discriminator)
But I’m not sure which way is correct.
Anyone can help me?

1st way to do this.

optimizer_encoder = optim.Adam(...)
optimizer_discriminator = optim.Adam(...)

# For discriminator 
optimizer_discriminator.zero_grad()
discriminator_loss.backward()
optimizer_discriminator.step()

# For encoder 
optimizer_encoder.zero_grad()
encoder_loss.backward()
optimizer_encoder.step()

2nd way to do this

learnable_params = list(encoder.parameters()) + list(discriminator.parameters())
optimizer_dis_tgt = optim.Adam(learnable_params, ...)

optimizer_all.zero_grad()
total_loss = discriminator_loss+ encoder_loss
total_loss.backward()
optimizer_all.step()