PyTorch

torch 与 torchvision 版本对应关系|截止2022年最新

最新更新日期:2022.4.8 所有官方稳定版本的whl文件:https://download.pytorch.org/whl/torch_stable.html Commands for Versions >= 1.0.0 v1.10.1 Conda OSX # conda conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 -c pytorch Linux and Windows # CUDA 10.2 conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch # CUDA 11.3 conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge # CPU Only conda install pytorch==1.10.1 torch...

训练网络时loss结果为NaN|PyTorch炼丹记

排查异常出现的地方 import torch # 正向传播 torch.autograd.set_detect_anomaly(True) # TODO # 反向传播 with torch.autograd.detect_anomaly(): loss.backward() 解决方案 1.调整学习率 如果在迭代的100轮以内,出现NaN,一般情况下的原因是因为你的学习率过高,需要降低学习率。可以不断降低学习率直至不出现NaN为止,一般来说低于现有学习率1~10倍即可。 2.减小batch size 3.梯度爆炸 如果当前的网络是类似于RNN的循环神经网络的话,出现NaN可能是因为梯度爆炸的原因,一个有效的方式是增加“gradient clipping”(梯度截断来解决) 数据归一化(减均值,除方差,或者加入normalization,例如BN、L2 norm等) 更换参数初始化方法(对于CNN,一般用xavier或者msra的初始化方法); 4.计算问题 可能用0作为了除数; 可能0或者负数作为自然对数 数组越界(尤其是自己,自定义了一个新的网络,可能出现这种情况) 在某些涉及指数计算,可能最后算得值为INF(无穷)(比如...

错误: RuntimeError: Distributed package doesn’t have NCCL built in|PyTorch踩坑

错误: RuntimeError: Distributed package doesn’t have NCCL built in 错误表述 File "C:\Users\AI.conda\envs\AI\lib\site-packages\torch\distributed\distributed_c10d.py", line 597, in _new_process_group_helper raise RuntimeError("Distributed package doesn’t have NCCL " RuntimeError: Distributed package doesn’t have NCCL built in 原因分析 windows不支持NCCL,应该修改为gloo 解决方案 在代码distributed_c10d.py中片段: prefix_store = PrefixStore(group_name, store) if backend == Backend.GLOO: pg = ProcessGroupGloo( pr...

Pytorch中的model.train()和model.eval()

model.train() 在使用pytorch构建神经网络的时候,训练过程中会在程序上方添加一句model.train(),作用是启用batch normalization和drop out。 启用BatchNormalization和 Dropout,将BatchNormalization和Dropout置为True   model.eval() 测试过程中会使用model.eval(),这时神经网络会沿用batch normalization的值,并不使用drop out。 不启用 BatchNormalization 和 Dropout,将BatchNormalization和Dropout置为False   解析 如果模型中有BN层(Batch Normalization)和Dropout,需要在训练时添加model.train(),在测试时添加model.eval()。 其中model.train()是保证BN层用每一批数据的均值和方差,而model.eval()是保证BN用全部训练数据的均值和方差; 而对于Dropout,model.train()是随机取一部分网络连接来训练更新参数, 而...

pytorch中调整学习率的lr_scheduler机制

有的时候需要我们通过一定机制来调整学习率,这个时候可以借助于torch.optim.lr_scheduler类来进行调整;torch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(learning rate)的方法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。 torch.optim.lr_scheuler ● StepLR: LR is delayed by gamma every step_size epochs ● MultiStepLR: LR is delayed by gamma once the number of epoch reaches milestones. ● ExponentialLR ● CosineAnnealingLR ● ReduceLROnPlateau torch.optim.lr_scheduler.StepLR 语法: class torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1) 更新策略: 每过s...