Я работаю с Pytorch и набором данных CIFAR100. Хотя я новичок, я хотел бы включить в свой код механизм ранней остановки
def train(net,trainloader,epochs,use_gpu = True):
...
net.train()
for epoch in range(epochs):
print ("Epoch {}/{}".format(epoch+1, epochs))
running_loss = 0.0
running_corrects = 0
for i, data in enumerate(trainloader, 0):
images, labels = data[0].to(device), data[1].to(device)
optimizer.zero_grad()
outputs = net(images)
_, preds = torch.max(outputs, 1)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
epoch_loss = running_loss/len(trainloader.dataset)
print('Loss: {}'.format(epoch_loss))
Это класс ранней остановки:
class EarlyStopper:
def __init__(self, patience=1, min_delta=0):
self.patience = patience
self.min_delta = min_delta
self.counter = 0
self.min_validation_loss = float('inf')
def early_stop(self, validation_loss):
if validation_loss < self.min_validation_loss:
self.min_validation_loss = validation_loss
self.counter = 0
elif validation_loss > (self.min_validation_loss + self.min_delta):
self.counter += 1
if self.counter >= self.patience:
return True
return False
У меня нет набора проверки, я полагаю, что тестовый набор такой же, как набор проверки.
Теперь я хотел бы знать, где я должен сделать эти строки:
р>
early_stopper = EarlyStopper(patience=3, min_delta=10)
for epoch in np.arange(n_epochs):
train_loss = train_one_epoch(model, train_loader)
validation_loss = validate_one_epoch(model, validation_loader)
if early_stopper.early_stop(validation_loss):
break
Подробнее здесь: https://stackoverflow.com/questions/785 ... -mechanism
Pytorch: Механизм ранней остановки ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение