
Pytorch炼丹小知识点
ImangoCloud
这个作者很懒,什么都没留下…
展开
-
cuda多版本管理和分类、运行时cuda、驱动cuda
简单的信息查看和调试命令运行时只会采用虚拟环境里面的cuda运行时版本,所以不用显示切换cuda版本,只要支持即可。查看cuda版本ls -l /usr/local | grep cuda这里是安装的cuda存放的地方和软链接的位置./usr/local/cuda是一个软链接,链接到了/usr/local/cuda-9.0(或者其他版本的目录)nvidia-smi它的输出是驱动的版本,并不能就是说torch实际运行时的cuda版本。GPU的cuda版本分类sudo ubuntu-dri原创 2022-01-29 20:26:36 · 3184 阅读 · 0 评论 -
pytorch损失值nan或者model输出nan或者inf的相关问题
现象和原因分析在能确定模型正常的情况下,可能是优化器没有设置正确,一定要加上weight decay的正则化项,和时间衰减的学习率;也有可能是学习率太大,梯度爆炸也可以添加权重初始化项。optimizer = torch.optim.SGD(model.parameters(), lr=params.LR, weight_decay=0.00001)lr_scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=p原创 2021-12-24 15:50:44 · 3063 阅读 · 0 评论 -
torch一次性设置随机种子复现及torch.backends.cudnn设置
def setup_seed(seed): torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) np.random.seed(seed) random.seed(seed) torch.backends.cudnn.deterministic = True# 设置随机数种子setup_seed(20)保证模型训练结果始终保持一致PyTorch + NumPy这么做会降低模型准确率,这是b原创 2021-12-09 21:09:27 · 1751 阅读 · 0 评论 -
nn.CrossEntropyLoss()可接受两种输入
nn.CrossEntropyLoss()可接受两种输入# Example of target with class indicesloss = nn.CrossEntropyLoss()input = torch.randn(3, 5, requires_grad=True)target = torch.empty(3, dtype=torch.long).random_(5)output = loss(input, target)output.backward()# Example of原创 2021-12-17 01:19:49 · 3331 阅读 · 2 评论 -
torch的optim控制可以训练的参数
torch的optim控制可以训练的参数参考optimizer = optim.SGD(model.fc2.parameters(), lr=1e-2) # 只传入fc2的参只训练f2的参数optimizer = torch.optim.SGD([ {'params': model.parameters()}, {'params': lossnet.parameters(), 'lr': 1e-4} ], l原创 2021-12-17 01:22:07 · 641 阅读 · 0 评论 -
深度学习网络nan问题
主要是因为log的时候自变量可能是0,会得到-inf,0*inf就是nanl_preds[l_preds != l_preds] = 0. # 去除nan值其他人的方法torch.log(x+1e-10)参考原创 2021-12-11 22:02:46 · 811 阅读 · 0 评论 -
多个模型的参数的保存与导入
保存两个模型的参数filename = './models/vgg16/ocr.pth'state = {'model':model.state_dict(), 'lossnet':lossnet.state_dict()}torch.save(state, filename)载入两个模型load_name = './models/vgg16/ocr.pth'checkpoint = torch.load(load_name)model.load_state_dict(ch原创 2021-12-17 01:22:45 · 351 阅读 · 0 评论 -
loss.item()大坑
loss.item()大坑跑神经网络时遇到的大坑:代码中所有的loss都直接用loss表示的,结果就是每次迭代,空间占用就会增加,直到cpu或者gup爆炸。解决办法:把除了loss.backward()之外的loss调用都改成loss.item(),就可以解决。accuracy也是一样,也得用item()的形式。原理可以见这里:https://www.zhihu.com/question/67209417/answer/344752405...原创 2021-12-17 01:18:32 · 8174 阅读 · 0 评论