Yes,
In the error message, it says that it expects something like (int, torch.DoubleTensor, torch.LongTensor, torch.DoubleTensor, bool) and got (int state, torch.DoubleTensor input, torch.DoubleTensor target, torch.DoubleTensor output, bool sizeAverage). You can see that the argument called target was given as a torch.DoubleTensor while it was expecting a torch.LongTensor. Indeed, the labels for the MSELoss should be indices (integer values) and thus be passed as LongTensors.
In your case, you can change all labels of your dataset by doing y_train = y_train.long() at the beginning of your script. Or if you want to keep it as double precision floating point number to be used somewhere else, you can change it at the last moment with loss = loss_fn(outputs, labels.long()) as well.
EDIT: I read the error message in the wrong order, it is currently a LongTensor but expects a DoubleTensor, so y_train = y_train.double(), sorry.