pytorch的使用小技巧

  • 指定GPU编号: os.environ[“CUDA_VISIBLE_DEVICES”] = “0,1”

  • 查看模型每层输出详情:
    from torchsummary import summary
    summary(your_model, input_size=(channels, H, W))

  • 梯度裁剪(Gradient Clipping)
    import torch.nn as nn
    outputs = model(data)
    loss= loss_fn(outputs, target)
    optimizer.zero_grad()
    loss.backward()
    nn.utils.clip_grad_norm_(model.parameters(), max_norm=20, norm_type=2)
    optimizer.step()
    nn.utils.clip_grad_norm_ 的参数:
    parameters – 一个基于变量的迭代器,会进行梯度归一化
    max_norm – 梯度的最大范数
    norm_type – 规定范数的类型,默认为L2
    【 梯度裁剪在某些任务上会额外消耗大量的计算时间】

  • 扩展单张图片维度 (很实用)
    因为在训练时的数据维度一般都是 (batch_size, c, h, w),而在测试时只输入一张图片,所以需要扩展维度,扩展维度有多个方法:
    import cv2
    import torch
    image = cv2.imread(img_path)
    image = torch.tensor(image)
    print(image.size())

    img = image.view(1, *image.size())

    img = image[np.newaxis, :, :, :]

    img = image.unsqueeze(dim=0)

    print(img.size())

  • 防止验证模型时爆显存
    1.验证模型时不需要求导,即不需要梯度计算,关闭autograd,可以 提高速度,节约内存。
    with torch.no_grad():
    【使用model进行预测的代码】
    pass

  1. Pytorch 训练时无用的临时变量可能会越来越多,导致 out of memory,torch.cuda.empty_cache() 可释放缓存的显存。
  • 学习率的几种衰减方式
  • 冻结某些层的参数
  • 对不同层使用不同学习率
  • 网络参数初始化
  • 加载内置预训练模型
    参考:
    https://zhuanlan.zhihu.com/p/76459295
    https://zhuanlan.zhihu.com/p/73893187
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值