Example #1
0
def eval(tokenizer: Tokenizer, model: GPT2LMHeadModel, dataset: MyDataset,
         args: TrainingArguments):
    model.eval()
    loss = 0
    iterator = build_data_iterator(tokenizer, dataset, args.eval_batch_size,
                                   args.block_size)
    for ids, attention_mask in tqdm(iterator, desc='eval'):
        ids = ids.to(args.device)
        with torch.no_grad():
            loss += model(ids,
                          attention_mask=attention_mask.to(args.device),
                          labels=ids)[0].item()
    model.train()
    return loss / len(iterator)
def _validate(
    model: GPT2LMHeadModel,
    dev_dataloader: DataLoader,
    device: torch.device,
    logger: logging.Logger,
    global_step: int,
):
    model.eval()
    loss_list = []
    for batch_data in tqdm(dev_dataloader, desc="[EVAL]"):
        with torch.no_grad():
            input_ids, attention_mask, labels = tuple(value.to(device) for value in batch_data)
            model_outputs = model.forward(input_ids, attention_mask=attention_mask, labels=labels, return_dict=True)
            loss_list.append(model_outputs.loss.item())

    mean_loss = np.mean(loss_list)
    logger.info(f"[EVAL] global_step:{global_step} loss:{mean_loss:.4f} perplexity:{math.exp(mean_loss):.4f}")
    model.train()