Does the following not work:
def calc_accuracy(mdl,X,Y):
# TODO: why can't we call .data.numpy() for train_acc as a whole?
max_vals, max_indices = torch.max(mdl(X),1)
train_acc = (max_indices == Y).sum().data.numpy()/max_indices.size()[0]
return train_acc
??