I have a seq2seq LSTM model with 100% teacher forcing. The loss decreases nicely as time progresses. However, when I place my model into model.eval() mode  & without teacher forcing, the eval loss diverges (increases) away from the training loss (decreases) as time progresses.
I have tried using learning_rate schedulers during training e.g. exponential probability, or 0.5 probability of teacher forcing at a given time step, this resulted in no change to the eval-train trend.
I then tried the following:

train data == eval data,      results: same trend
remove batch shuffling,      results : same trend
vary batch size,                  results: same trend
vary data set size,              results: same trend

Note:
I do not have batch normalization in my model.
Putting teacher forcing in my eval function gives same eval loss as training loss.
Is there anything that could explain such results aside from coding errors (I have unit tests at each stage).
Thanks.