By “separated my discriminator loss function” I assume you mean that you are now using frame_loss and sequence_loss, which apparently were calculated together before this experiment?
If you just changes this line:
d_loss = -dis_loss(out2, out1, out4 ,out3)

to these
frame_loss = fdis_loss(out2, out1)
sequence_loss = sdis_loss(out4, out3)
d_loss = -(frame_loss + sequence_loss)

, it’s a bit strange, as I assume dis_loss just summed both losses as well.
I’m not sure how your training routine works exactly, but are you sure you need retain_graph=True for your generator backward?
Also, would it be possible to update the discriminator first and clear its intermediate variables before updating the generator, as this would save some memory. The DCGAN example 3 gives a good overview of what I mean.
A small side note regarding the code: Variables are deprecated sind PyTorch 0.4.0, so that you can directly use tensors now. If you need gradient for a particular tensor, just set requires_grad=True when instantiating it. The volatile argument was replaced with a with statement:
with torch.no_grad():
    # no gradients can be calculated
    for data, target in val_loader:
        ...