-
指定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
- Pytorch 训练时无用的临时变量可能会越来越多,导致 out of memory,torch.cuda.empty_cache() 可释放缓存的显存。
- 学习率的几种衰减方式
- 冻结某些层的参数
- 对不同层使用不同学习率
- 网络参数初始化
- 加载内置预训练模型
参考:
https://zhuanlan.zhihu.com/p/76459295
https://zhuanlan.zhihu.com/p/73893187