It seems that multi_acc is returning the accuracy (in %) for each batch and the training loop accumulates it. Later you are then dividing by the number of samples.
An example run for a 3 batches and 30 samples would thus be:
train_epoch_acc = 90 + 80 + 70 # returned by multi_acc
train_epoch_acc/len(train_loader) = 240 / 3 = 80

so it looks alright assuming all batches contain the same number of samples (otherwise you would add a bias to the calculation).
Note that you’ve previously divided by len(train_loader.dataset), which gives the number of samples, while len(train_loader) returns the number of batches.