I’m confused about the way that I calculate my loss

here is the function:

```
def test_epoch(iterator, model, criterion):
train_loss = 0
all_y = []
all_y_hat = []
model.eval()
for batch in iterator:
y = torch.stack([batch.toxic,
batch.severe_toxic,
batch.obscene,
batch.threat,
batch.insult,
batch.identity_hate],dim=1).float().to(device)
text, length = batch.comment_text
length = length.to('cpu')
with torch.no_grad():
y_hat = model(text, length)
loss = criterion(y_hat, y)
train_loss += loss.item()
all_y.append(y)
all_y_hat.append(y_hat)
y = torch.vstack(all_y)
y_hat = torch.vstack(all_y_hat)
roc = roc_auc_score(y.cpu(),y_hat.round().detach().cpu())
return train_loss / len(y) , roc
```

the way I calculated my loss in the above function is here:

```
train_loss = 0
...
loss = criterion(y_hat, y)
...
train_loss += loss.item()
...
return train_loss / len(y) , roc
```

and it gives at the first epoch

`Loss: 0.0148(valid) | roc: 0.547727 (valid)`

but when I calculate the loss in this way:

```
all_loss = []
...
loss = criterion(y_hat, y)
...
all_loss.append(loss.item())
...
return np.mean(all_loss), roc
```

it gives at the first epoch

` Loss: 0.7691(valid) | roc: 0.548824 (valid)

`

why the loss in the first way is totally different from the loss in the second way . and which one should I use or rely on ?

THANKS !