in detector/train.py [0:0]
def train(model: nn.Module, optimizer, device: str, loader: DataLoader, desc='Train'):
model.train()
train_accuracy = 0
train_epoch_size = 0
train_loss = 0
with tqdm(loader, desc=desc, disable=distributed() and dist.get_rank() > 0) as loop:
for texts, masks, labels in loop:
texts, masks, labels = texts.to(device), masks.to(device), labels.to(device)
batch_size = texts.shape[0]
optimizer.zero_grad()
loss, logits = model(texts, attention_mask=masks, labels=labels)
loss.backward()
optimizer.step()
batch_accuracy = accuracy_sum(logits, labels)
train_accuracy += batch_accuracy
train_epoch_size += batch_size
train_loss += loss.item() * batch_size
loop.set_postfix(loss=loss.item(), acc=train_accuracy / train_epoch_size)
return {
"train/accuracy": train_accuracy,
"train/epoch_size": train_epoch_size,
"train/loss": train_loss
}