By using shuffle=True you shuffle up the dataset which makes the training batches more generalized which in turn makes your model more generalized  thus you model performs much better on the unseen data