Hi,
I could not find any information about buffering data from Loss (maybe necessary in particular loss). But the ideal form is to use initializations within __init__ method and usage in forward, because initializing a object has its own overhead problems when for every single run in train or test loop, the object needs to be initialized (may cause memory issues too, because previously initialized objects are no longer useful and garbage collector should handle it I think).
So I think as you used this convention for nn.Dropout or the other parts, I think you should do it for Loss too.
Bests
Nik