valid_loss_best appears to be re-initialized at the start of every epoch in Engine.run(), which may prevent proper saving of the best model based on validation loss.
It might be better to move the initialization outside the training loop. Please let me know if this was intended.