Hi,
I have a question on how to update overlapping parameters using different losses. For example,
hidden = encoder(imgs)
reconstructed = decoder(hidden)
prediction = classifier(hidden)

optimizer1 = Adam(encoder.parameters())
optimizer2 = Adam(decoder.parameters())
optimizer3 = Adam(classifer.parameters())

loss1 = Loss1(imgs, reconstructed)
loss2 = Loss2(prediction, labels)

In this case, I’d like to

minimise loss1 and only update the parameters of encoder and decoder.
minimise loss2 and only update the parameters of encoder and classifer.
maximise loss2 and only update the parameters of encoder.

I tried to call backward() for each loss separately, but I’ve got the following error:
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.FloatTensor [64, 32, 7, 7]] is at version 2; expected version 1 instead. Hint: the backtrace further above shows the operation that failed to compute its gradient. The variable in question was changed in there or anywhere later. Good luck!

I’m not sure if it’s the correct way. Or do I need to sum the loss and call backward() only once?
Thanks in advance for any help!