Usually you would just calculate the training accuracy on-the-fly without setting the model to eval() and recalculate the “real” training accuracy for this epoch. Mostly because it’s just too expensive and the running loss estimate is often good enough.
That being said, there are some issues in your code:

you are currently saving the loss in train_batch_loss with out detaching it. This will store the whole computation graph and can eventually yield an out of memory error. If you don’t need to call backward() on the loss anymore, you should rather store it via train_batch_loss.append(loss.item()), which will properly detach the loss.
instead of calling the model.forward method, call the model directly as: y_pred = model(x). this will make sure to call al registered hooks (if any) and will avoid potentially other issues.