Thanks for clearing up some points for me ptr 
Further, like you said, the reason for not freezing G is because we detatch its output when training D to discriminate fake samples as fake. So freezing G at any time would be pointless.
However:



 ZimoNitrome:

Maybe freezing D and G with param.requires_grad = False is better? Trying that out seems to make little difference if any to the original training scheme though.


While this was my original sentiment, some further training by freezing D here and unfreezing D here seems to speed up the “convergence”.
If we look at the code I think this makes sense. What the DCGAN code does is essentially:
Train D that real → 1
Train D that fake → 0
Train D(G) that fake → 1
In one iteration it seems like we backprop D so that it should learn that fake → 0 but also that fake → 1 (in the case where we still have the graph of fake being produced by G). Maybe this would make D in general learn that fake → 0.5 or 0.25 or something like that. By freezing D at said points this might be mitigated.
I am currently at work so I can’t share trainig results but this does indeed look like an improvement.
On another note, can we still train networks then even if they are in eval mode?