My personal point of view is:


torch.distributions have a lot of sampling methods and other utility functions (which can be used in e.g. a reinforcement learning setup), so that I wouldn’t use them to just initialize a tensor.
I’m using nn.init only to initialize nn.Modules via model.apply(init_fn).
Method 3 is the way I would prefer to initialize a tensor.

Of course your preference might be different and I can also imagine that Method 2 could be preferred.