Your models differ a bit at the end. In your keras model you are using a last dense layer with a single output and a sigmoid non-linearity.
In your PyTorch model you add a relu and dropout of before the sigmoid:
    out = self.dropout(F.relu(self.dense_l3(out)))
    return self.soft(out)

Could you remove the relu and dropout and run it again?