When you compute the loss try something like this
            train_loss = train_loss + ((1 / (batch_idx + 1)) * (loss.data - train_loss))

end then in between you two for loops do this
for epoch in range(num_epochs):
  train_loss = 0.
  for x,y in loader:

then instead of using the if statement for you loss function just put it on the outer epoch for loop so it prints every epoch and change the loss.item() to train loss.
for epoch in range(num_epochs):
  train_loss = 0.
  for x,y in loader:
    output = model(x)
    loss = criterion(output,y)
    acc = binary_accuracy(predictions, batch.Label)
    loss.backward()
    optimizer.zero_grad()
    optimizer.step()
    train_loss = train_loss + ((1 / (batch_idx + 1)) * (loss.data - train_loss))

  print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

something like that. And run it for a few epochs to see if the loss changes.