3.7学习记录

《深度学习调参指南》:

参考资料:谷歌深度学习调参手册(提炼,理解,总结)-CSDN博客

1.batch_size:

小白不是很理解,怎么操作?

梯度累积是一种在多个小 batch 上计算梯度并将它们相加来模拟大 batch_size 的方法。当使用梯度累积时,每个小 batch 的梯度计算需要保存并累加,这会增加内存使用和计算时间。因此,虽然梯度累积可以帮助解决显存不足的问题,但是需要权衡计算效率和内存消耗。(如何操作???)

所以:假设你的模型是model,优化器是optimizer,数据加载器是data_loader,我们希望模拟的大batch_size是通过累积小batch的梯度4次来实现的。

步骤
  1. 初始化梯度为零。
  2. 对于每个小batch,计算损失(loss)并调用loss.backward()累积梯度,但不立即进行参数更新。
  3. 每累积指定次数的梯度后,调用优化器的step()方法更新模型参数,并将梯度重置为零。
  4. 重复步骤2和3直到遍历完所有数据。
import torch

# 假设已经定义了model, loss_function和optimizer
# data_loader = DataLoader(...)

accumulation_steps = 4  # 指定需要累积的步骤数,以模拟更大的batch_size

model.train()
for i, (inputs, labels) in enumerate(data_loader):
    outputs = model(inputs)  # 计算模型输出
    loss = loss_function(outputs, labels)  # 计算损失
    loss = loss / accumulation_steps  # 平均损失,这一步是可选的,但有助于保持不同batch_size下梯度的尺度相同
    loss.backward()  # 累积梯度
    
    if (i + 1) % accumulation_steps == 0:  # 每累积指定次数后,更新一次参数
        optimizer.step()  # 更新参数
        optimizer.zero_grad()  # 清空梯度

# 确保最后不足accumulation_steps的部分梯度也能被利用
if i % accumulation_steps != 0:
    optimizer.step()
    optimizer.zero_grad()

调整accumulation_steps的值,控制梯度累积的次数,从而模拟更大的batch_size

这种方法尤其在GPU内存有限,但需要较大batch_size来稳定训练过程或提高训练效果的情况下非常有用。

会增加每个epoch的计算时间,并且需要更多的内存来存储累积的梯度,因此需要根据具体情况做出权衡。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值