Just making sure I understand: you want to train a model architecture twice (or multiple times), then evaluate both on the evaluation set and select the instance that performed best for the next epoch? So that you can optimize the randomness in weights initialization and other possible random aspects like dropout?
In that case, you can simpy train your two separate instances by having differently named optimizer and model variables… However, I suspect that you would need two times (or N times) as much memory on your GPU(s) as for one model, since you keep multiple instances of the weights etc. That is probably why saving and loading is the best approach, so that you can maximize your batch size and GPU usage…