Transformer训练程式码 PART2

训练程式码 part.2

import torchfrom tqdm.auto import tqdmprogress_bar = tqdm(range(num_training_steps))# directory to save the modelsoutput_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 中。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章