Why are you using MSELoss if it is a classification task (you have used a sigmoid function at the end of network squishing the value between 0 and 1)? Was this intentional? Did you use the same methodology in Keras?
Did you set the same learning rates in both the models? Can you also print out the Keras code? Both the codes could then be crosschecked.