一起学Hugging Face Transformers(14)- “自定义训练循环”问题解答


前言

前一篇文章 自定义训练循环 收到不少提问,在这里统一解答一下。

问题一:可以详解下面这两段代码吗?

num_training_steps = num_epochs * len(train_dataloader)
lr_scheduler = get_scheduler(
    name="linear", optimizer=optimizer, num_warmup_steps=0, num_training_steps=num_training_steps
)

1. 训练步骤的计算

num_training_steps = num_epochs * len(train_dataloader)
  • num_epochs:训练的轮数(epoch),表示整个训练数据集将被迭代多少次。
  • len(train_dataloader):训练数据加载器中的批次数(batch),表示一个epoch中有多少个批次。

这段代码的目的是计算训练的总步骤数(total training steps),即训练过程中将执行的前向和反向传播步骤的总次数。这是通过将每个epoch中的批次数与epoch数相乘得到的。这个值在设置学习率调度器时很重要。

2. 学习率调度器的定义

lr_scheduler = get_scheduler(
    name="linear", optimizer=optimizer, num_warmup_steps=0, num_training_steps=num_training_steps
)
  • get_scheduler:这是一个用于获取学习率调度器的函数。学习率调度器(Learning Rate Scheduler)在训练过程中调整学习率,以便更好地控制模型的优化过程。
  • name=“linear”:指定调度器的类型为线性调度器(linear scheduler),表示学习率将在训练期间线性地从初始值下降到最终值。
  • optimizer=optimizer:指定优化器,调度器将与这个优化器一起工作。
  • num_warmup_steps=0:指定学习率预热步骤(warmup steps)的数量。在预热阶段,学习率从0逐渐增加到初始值。这里设置为0,表示没有预热阶段。
  • num_training_steps=num_training_steps:指定训练的总步骤数,即之前计算的num_training_steps。这告诉调度器整个训练过程中有多少步,这样它就能在训练过程中正确地调整学习率。

3. 作用总结

  • 计算总训练步骤数:这是为了让学习率调度器知道整个训练过程的总步数,以便合理地调整学习率。
  • 定义学习率调度器:学习率调度器根据总训练步骤数和指定的调度策略(如线性下降)来调整优化器的学习率,从而改善模型的训练效果。

4. 示例详细解释

假设我们有一个数据集,通过train_dataloader可以得到每个epoch中的批次数是500,我们打算训练3个epoch。则总的训练步骤数为:

num_epochs = 3
len(train_dataloader) = 500

num_training_steps = num_epochs * len(train_dataloader
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值