@ptrblck I think I just found the source of the issue ! So I printed the Pytorch net object and I noticed that there was an ordering issue in the ordered dictionary causing the different outputs.
So when the output is the second case (the one you get), the net looks like this  when printed:
Sequential(
  (fc1): Linear(in_features=20, out_features=2, bias=False)
  (relu): ReLU()
)

but in the first case, the net looks like this !!!:
Sequential(
  (relu): ReLU()
  (fc1): Linear(in_features=20, out_features=2, bias=False)
)


the relu and fc are flipped! I think the ordered dictionary should have been specified this way, just took a look at an example in the documentation.
OrderedDict([("fc1", nn.Linear(20, 2, bias=False)),
                                     ("relu", nn.ReLU())])

instead of the
OrderedDict({"fc1": nn.Linear(20, 2, bias=False),
                                     "relu": nn.ReLU()})

my bad that I failed to realize that. With the other way, it now gives me the same results as you.