常见error

  1. check‘optimizer = torch.optim.Adam(params’的params的写法,不同模态叠加时候,params不同
  2. 当loss震荡,比较锯齿不平滑,设置小一点lr:optimizer = torch.optim.Adam(params, lr=0.00001)
    【已解决】RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronous-CSDN博客

wandb

调参

  1. 只是把 lr 从 1 e-6 改成 1 e-5,就跑了 80 个 epoch 就开始报 nan 的 loss。 ——方法是把 batch 调大
  2. loss 下降波动比较毛刺的时候,将 lr 调小,也不行,可能下降更慢
  3. 可以scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode=’min’, factor=0.1, patience=10, min_lr=1e-8),
  4. 调小epoch size
  5. 最详细最清晰的epoch、batchsize和iteration概念辨析_batch size和epoch-CSDN博客
  6. 数据量大了,learning rate 要调整小。
  7. batch size 非常大所有数据一次性传,效果好了
  8. 模型实验代码技巧_模型设置seed-CSDN博客 求导监测
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 正向传播开启自动求导异常侦测
    torch.autograd.set_detect_anomaly(True)

    # 查看参数梯度和更新情况
    for name, parms in model.named_parameters():
    print("更新前/后")
    print('-->name:', name)
    print('-->para:', parms)
    print('-->grad_requirs:', parms.requires_grad)
    print('-->grad_value:', parms.grad)

    # 反向传播求导侦测
    from apex import amp
    # from torch.cuda import amp
    with torch.autograd.detect_anomaly():
    if use_amp:
    with amp.scale_loss(loss, optimizer) as scaled_loss:
    scaled_loss.backward()
    else:
    loss.backward(retain_graph=True)