Распечатайте потерю проверки в каждую эпоху в PyTorch

#pytorch #cross-entropy

Вопрос:

Я хочу распечатать потерю проверки модели в каждую эпоху, как правильно получить и распечатать потерю проверки?

Это похоже на это:

 criterion = nn.CrossEntropyLoss(reduction='mean')
for x, y in validation_loader:
 optimizer.zero_grad()
 out = model(x)
 loss = criterion(out, y)
 loss.backward()
 optimizer.step()
 losses  = loss

display_loss = losses/len(validation_loader)
print(display_loss)
 

или вот так

 criterion = nn.CrossEntropyLoss(reduction='mean')
for x, y in validation_loader:
     optimizer.zero_grad()
     out = model(x)
     loss = criterion(out, y)
     loss.backward()
     optimizer.step()
     losses  = loss
    
display_loss = losses/len(validation_loader.dataset)
print(display_loss)
 

или что-то еще? Спасибо.

Комментарии:

1. никогда и НИКОГДА НЕ создавайте резервную копию, используя данные проверки/тестирования!!!!!

Ответ №1:

НЕТ!!!!
введите описание изображения здесь

Ни при каких обстоятельствах вы не должны обучать свою модель (т. е. звонить loss.backward() optimizer.step() ), используя данные проверки / тестирования!!!

Если вы хотите проверить свою модель:

 model.eval()  # handle drop-out/batch norm layers
loss = 0
with torch.no_grad():
  for x,y in validation_loader:
    out = model(x)  # only forward pass - NO gradients!!
    loss  = criterion(out, y)
# total loss - divide by number of batches
val_loss = loss / len(validation_loader)
 

Обратите внимание, что » как optimizer » не имеет ничего общего с оценкой модели в наборе проверки.
Вы не изменяете модель в соответствии с данными проверки — только проверяете ее.

Комментарии:

1. Ах, извините, я просто учусь глубокому обучению, и спасибо вам.

2. @rubiks — главное здесь то, что вы понимаете, ПОЧЕМУ вы не должны создавать резервные копии с использованием данных проверки

3. Есть небольшая ошибка 🙂 Это должно быть потеря = критерий(out, y)