iT邦幫忙

0

Transformer訓練程式碼 PART2

  • 分享至 

  • xImage
  •  

訓練程式碼 part.2

import torch
from tqdm.auto import tqdm

progress_bar = tqdm(range(num_training_steps))

# directory to save the models
output_dir = "MLP_TrainedModels"

for epoch in range(num_train_epochs):
    # Training
    model.train()
    for batch in train_dataloader:
        outputs = model(**batch)
        loss = outputs.loss
        accelerator.backward(loss)
        optimizer.step()
        lr_scheduler.step()
        optimizer.zero_grad()
        progress_bar.update(1)

    # Evaluation
    model.eval()
    losses = []
    for step, batch in enumerate(eval_dataloader):
        with torch.no_grad():
            outputs = model(**batch)
        loss = outputs.loss
        losses.append(accelerator.gather(loss.repeat(batch_size)))

    losses = torch.cat(losses)
    losses = losses[: len(eval_dataset)]

    # perplexity metric used for mask language model training
    try:
        perplexity = math.exp(torch.mean(losses))
    except OverflowError:
        perplexity = float("inf")
    print(f">>> Epoch {epoch}: Perplexity: {perplexity}")

    # Save model
    accelerator.wait_for_everyone()
    unwrapped_model = accelerator.unwrap_model(model)
    unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)
    if accelerator.is_main_process:
        tokenizer.save_pretrained(output_dir)

首先使用python內建的tqdm設定一個進度條來監控訓練進度,然後為輸出訓練模型設定一個目錄。接下來定義一個for循環來循環遍歷epoch數,對於每個epoch,我們開始資料集的訓練,循環遍歷訓練資料載入器,計算模型的輸出,計算輸出的損失,使用變壓器導入加速器包對模型進行反向傳播,使用優化器優化模型以最小化損失。並且應用學習率調度程序,使用優化器將累積梯度設為零,並更新了進度條。 我們這樣做,直到完成一個時期的整個資料集的訓練。然後在測試資料集上評估了一個時期的訓練模型,計算了測試資料集上的損失,類似於訓練期間的計算方式,計算模型的交叉熵損失,然後計算損失的指數以獲得模型的 Perplexity。最後使用加速器保存預訓練模型,並使用分詞器保存有關模型的重要文件,例如分詞器和詞彙資訊。訓練後的模型和設定檔保存在輸出目錄資料夾 MLP_TrainedModels 中。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言