Could you compare some hyperparameters, e.g. the learning rate between the two approaches?
Also, which criterion are you using in your Keras implementation.
I’m not completely sure, how the LSTM layers work in Keras, but it seems you are initializing two to create a bidirectional layer?