Maybe I’m a bit slow today, but let’s clarify some aspects. 
So during the training of ADvsMCI you model reaches an accuracy of 1.0 for the training and validation set. How is the accuracy for the test set (before saving and loading the model again)?
Are you calling model.eval() before calculating the validation and test accuracy? Did you call model.train() before the next training step?
After saving and loading the same model (which had an accuracy of 1.0 for ADvsMCI), it cannot reach the same accuracy anymore? Neither for the training set, nor for the validation and test set?
If I understood it correctly, something “changed” after you are loading the model, am I right?
With “shuffling” I meant the reassigning of the data sets:

I copied the AD from the ADvsNC and MCI from the MCIvsNC to form ADvsMCI. Firstly, I thought maybe I mixed AD with NC and MCI with NC, so I tried copy NC from ADvsNC and NC from MCIvsNC as AD and MCI, respectively. The training processing is still wired as before. Now I have no idea about this problem.

Could you provide a code snippet with your implementation and with smaller datasets?