In my problem, shape of  train_y  is  (455,) , while the shape of  net(torch.from_numpy(X_train))  is  (455,1) , the inconsistense of shapes would make the MSELoss incorrect.
For example, you can run the below code to see the difference:
import torch
import torch.nn as nn
xs   = torch.randn(100)
ys   = torch.randn(100)
crit = nn.MSELoss()
print('Loss1 = %g,  Loss2=%g' % (crit(xs, ys),  crit(xs.reshape(100, 1), ys)))