1 Input type (CUDAFloatTensor) and weight type (CPUFloatTensor) should be the same

仔细看错误信息,CUDA和CPU,输入数据x和模型中的权重值类型不一样,一般来说是因为模型的参数不在GPU中,而输入数据在GPU中,通过添加model.cuda()将模型转移到GPU上以解决这个问题。

2 Input type (CUDADoubleTensor) and weight type (CUDAFloatTensor) should be the same

根据错误信息,显然Input类型和模型的权重类型不一致,一个为Double一个为float,通过对输入数据Tensor(x)进行x.float()将输入数据和模型权重类型一致,或者将模型权重的类型转化为Double也可以解决问题。

3 size mismatch at d:\pytorch\pytorch\torch\lib\thc\generic/THCTensorMathBlas.cu:243

很明显,size不匹配,原因有很多,请检查卷积核的尺寸和输入尺寸是否匹配,padding数是否正确。

4 expected CPU tensor (got CUDA tensor)

期望得到CPU类型张量,得到的却是CUDA张量类型。
很典型的错误,例如计算图中有的参数为cuda型有的参数却是cpu型就会遇到这样的错误。

>>> import torch
>>> from torch.autograd import Variable
>>> a = torch.Tensor([1])
>>> b = torch.Tensor([2])
>>> a = Variable(a)
>>> b = Variable(b)
>>> a.requires_grad = True
>>> b = b.type(torch.cuda.FloatTensor)
>>> c = a + b   # 这里a和b两个张量不在同一个空间一个在cpu中另一个在gpu中因此会引发错误
Traceback (most recent call last):File "C:\Users\dell\Anaconda3\envs\my-pytorch\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_codeexec(code_obj, self.user_global_ns, self.user_ns)File "<ipython-input-16-60f555c9e9aa>", line 1, in <module>c = a + bFile "C:\Users\dell\Anaconda3\envs\my-pytorch\lib\site-packages\torch\autograd\variable.py", line 813, in __add__return self.add(other)File "C:\Users\dell\Anaconda3\envs\my-pytorch\lib\site-packages\torch\autograd\variable.py", line 319, in addreturn self._add(other, False)File "C:\Users\dell\Anaconda3\envs\my-pytorch\lib\site-packages\torch\autograd\variable.py", line 313, in _addreturn Add.apply(self, other, inplace)File "C:\Users\dell\Anaconda3\envs\my-pytorch\lib\site-packages\torch\autograd\_functions\basic_ops.py", line 17, in forwardreturn a.add(b)
TypeError: add received an invalid combination of arguments - got (torch.cuda.FloatTensor), but expected one of:* (float value)didn't match because some of the arguments have invalid types: (!torch.cuda.FloatTensor!)* (torch.FloatTensor other)didn't match because some of the arguments have invalid types: (!torch.cuda.FloatTensor!)* (torch.SparseFloatTensor other)didn't match because some of the arguments have invalid types: (!torch.cuda.FloatTensor!)* (float value, torch.FloatTensor other)* (float value, torch.SparseFloatTensor other)

5 input is not contiguous at /pytorch/torch/lib/THC/generic/THCTensor.c:227

 batch_size, c, h, w = input.size()rh, rw = (2, 2)oh, ow = h * rh, w * rwoc = c // (rh * rw)out = input.view(batch_size, rh, rw, oc, h, w)out = out.permute(0, 3, 4, 1, 5, 2)out = out.view(batch_size, oc, oh, ow)
invalid argument 2: input is not contiguous at /pytorch/torch/lib/THC/generic/THCTensor.c:227

上述在第7行报错,报错原因是由于浅拷贝。上面式子中input为Variable变量。

上面第5行 out = out.permute(0, 3, 4, 1, 5, 2) 时执行了浅拷贝,out只是复制了out从input传递过来的指针,也就是说input要改变out也要随之改变。

解决方法是,在第6行的时候使用tensor.contiguous(),第6行改成:out = out.permute(0, 3, 4, 1, 5, 2).contiguous()即可。

6 是否开启torch.backends.cudnn.benchmark

默认这个选项是关闭的,对于我们大多数的任务来说,在开启的时候cudnn可以根据当前的设置来选择最优算法来加快训练速度。但是如果我们的输入在每一次的iterate的时候都进行变化,那么benchmark就会在每次iterate的时候重新选择最优算法,当选选择是需要花费时间的,反而速度会变慢,也就是说,如果我们每次训练的输入数据的size不变,那么开启这个就会加快我们的训练速度:
torch.backends.cudnn.benchmark = True

7 Assertion `cur_target >= 0 && cur_target < n_classes’ failed.

我们在分类训练中经常遇到这个问题,一般来说在我们网络中输出的种类数和你label设置的种类数量不同的时候就会出现这个错误。

但是,Pytorch有个要求,在使用CrossEntropyLoss这个函数进行验证时label必须是以0开始的:

假如我这样:

self.classes = [0, 1, 2, 3]

我的种类有四类,分别是0.1.2.3,这样就没有什么问题,但是如果我写成:

self.classes = [1, 2, 3, 4]

这样就会报错。

8 out of memory at /opt/conda/conda-bld/pytorch_1524590031827/work/aten/src/THC/generic/THCStorage.cu:58

兄弟,啥也不说了,这不是Bug,这是显存不够了~

解决方法:1、换小的batch;2、图片尺寸换成小的;3、图片格式从float换成int;4、换大显存、大显卡;5、优化程序,每一步都释放掉多余的占用显存的变量;

9 an illegal memory access was encountered at /opt/conda/conda-bld/pytorch_1525909934016/work/aten/src/THC/generated/../THCReduceAll.cuh:339

在GPU训练中不正确的内存访问,有可能是程序问题也有可能是当前驱动不兼容的问题:

因为cuda运行是异步的,所以我们的错误信息可能没有那么准确,为此我们将环境变量 CUDA_LAUNCH_BLOCKING=1 设为1,在当前的terminal中执行  CUDA_LAUNCH_BLOCKING=1 python train.py—— (train.py是你要执行的.py文件),再次执行就可以查看到当前出错的代码行。

仔细检查当前的代码,查看是否有内存的不正确访问,最常见的是索引超出范围。

如果不是代码问题,那么有可能是当前的pytorch版本和你的显卡型号不兼容,或者cudnn的库不兼容的问题。可以挑选出错误代码段对其进行简单的测试观察有没有错误即可。

10 view()操作只能用在连续的tensor下

利用is_contiguous()判断该tensor在内存中是否连续,不连续的话使用.contiguous()使其连续。

11 RuntimeError: some of the strides of a given numpy array are negative. This is currently not supported, but will be added in future releases.

这个原因是因为程序中操作的numpy中有使用负索引的情况:image[…, ::-1]。

解决办法比较简单,加入image这个numpy变量引发了错误,返回image.copy()即可。因为copy操作可以在原先的numpy变量中创造一个新的不适用负索引的numpy变量。

12 invalid argument 0: Sizes of tensors must match except in dimension 1. Got 14 and 13 in dimension 0 at /home/prototype/Downloads/pytorch/aten/src/THC/generic/THCTensorMath.cu:83

这种错误有两种可能:

  • 你输入的图像数据的维度不完全是一样的,比如是训练的数据有100组,其中99组是256*256,但有一组是384*384,这样会导致Pytorch的检查程序报错
  • 另外一个则是比较隐晦的batchsize的问题,Pytorch中检查你训练维度正确是按照每个batchsize的维度来检查的,比如你有1000组数据(假设每组数据为三通道256px*256px的图像),batchsize为4,那么每次训练则提取(4,3,256,256)维度的张量来训练,刚好250个epoch解决(250*4=1000)。但是如果你有999组数据,你继续使用batchsize为4的话,这样999和4并不能整除,你在训练前249组时的张量维度都为(4,3,256,256)但是最后一个批次的维度为(3,3,256,256),Pytorch检查到(4,3,256,256) != (3,3,256,256),维度不匹配,自然就会报错了,这可以称为一个小bug。

那么怎么解决,针对第一种,很简单,整理一下你的数据集保证每个图像的维度和通道数都一直即可。第二种来说,挑选一个可以被数据集个数整除的batchsize或者直接把batchsize设置为1即可。

13 RuntimeError: std::exception

这种错误并没有提示错误信息,属于在计算时内部的错误,所以来源是未知的。很有可能是pytorch的bug,最好dubug一下看看错误代码发生在哪儿,可以尝试下改变input的维度,或者将计算平台(CPU和GPU)切换一下,有些Pytorch的算子会存在bug,采用相同功能的不同的算子可能也会解决这个问题。

14 RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 0. Got 1 and 3 in dimension 1

这种错误十有八九是因为读取数据的时候发生错误了,也就是自己设定的dataset在dateloader中进行batch读取的时候发生错误。一般来说是维度不匹配,如果一个数据集中有3通道的也有四通道的图像,总之就是从dataset中传入dataloader中的图像大小不一致。自己好好检查检查,是否将所有图像都变成同样的shape。

注意,只要是dataset中的数据都要shape一样,不论是图像还是label,或者box,都必须一致了。所以好好检查吧。

15 Pycharm中对于Pytorch中num_workers 大于1的DataLoader 无法debug

有种奇怪的现象,当我们创建Pytorch中dataloader的时候,如果设置num_workers大于0,那么在debug的时候就会出现卡死的现象,这种原因有可能是pycharm的debugger不能够正确地识别程序运行中的子线程,因为num_workers这个参数是设置加载数据的subprocesses数量。所以解决办法就是将这个参数设置为0,这样就仅仅会使用主进程对数据进行读取,同时也可以debug。

16 Only tuples, lists and Variables supported as JIT inputs/outputs … 类似的问题

这个不是训练过程中,是使用torch.onnx.export导出onnx模型时常见的问题,这个问题的意思是在trace你模型的时候,某些input和output不是规定的类型或者说不存在,检查一下你的模型的输入是否正确。

Pytorch在训练过程中常见的问题相关推荐

  1. pytorch绘制训练过程中的曲线图

    因为在训练的过程中想要输出一下accuracy和loss曲线,因此找到了一篇比较好的博客,原文链接:https://blog.csdn.net/tequilaro/article/details/81 ...

  2. pytorch训练过程中loss出现NaN的原因及可采取的方法

    在pytorch训练过程中出现loss=nan的情况 1.学习率太高. 2.loss函数 3.对于回归问题,可能出现了除0 的计算,加一个很小的余项可能可以解决 4.数据本身,是否存在Nan,可以用n ...

  3. pytorch训练 loss=inf或者训练过程中loss=Nan

    造成 loss=inf的原因之一:data underflow 最近在测试Giou的测试效果,在mobilenetssd上面测试Giou loss相对smoothl1的效果: 改完后训练出现loss= ...

  4. 神经网络测试集loss不变_神经网络训练过程中不收敛或者训练失败的原因

    在面对模型不收敛的时候,首先要保证训练的次数够多.在训练过程中,loss并不是一直在下降,准确率一直在提升的,会有一些震荡存在.只要总体趋势是在收敛就行.若训练次数够多(一般上千次,上万次,或者几十个 ...

  5. 论文阅读|训练过程中动态改变训练方案的Dynamic R-CNN

    目录 论文相关信息 Abstract. 1 Introduction 2 Related Work 3 Dynamic Quality in the Training Procedure 3.1 Pr ...

  6. 理解YOLOv2训练过程中输出参数含义

    转载自https://blog.csdn.net/dcrmg/article/details/78565440 原英文地址: https://timebutt.github.io/static/und ...

  7. 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...

    原标题:三种电磁流量计运行过程中常见故障解决详情! 昨天给大家介绍了电磁流量计的一些典型故障,今天我们继续来谈电磁流量计的故障问题!电磁流量计在正常的保养与维护之后,在正常使用的过程中依旧是会因为当时 ...

  8. dqn在训练过程中loss越来越大_用DQN算法玩FlappyBird

    DQN算法可以用于解决离散的动作问题,而FlappyBird的操作正好是离散的. FlappyBird的游戏状态一般可以通过图像加卷积神经网络(CNN)来进行强化学习.但是通过图像分析会比较麻烦,因为 ...

  9. Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题

    Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 参考文章: (1)Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 (2)http ...

最新文章

  1. 算法,求1亿个数的中位数
  2. CF848C Goodbye Souvenir
  3. php 腾讯云 文字识别_腾讯科技(成都)有限公司
  4. 狗狗1岁相当于人类31岁!基于基因组甲基化图谱建立首个跨物种年龄转换公式...
  5. 不能比较或排序text、ntext和image数据类型,除非使用IS NULL 或 LIKE 运算符。
  6. 电机入门之路系列1--减速步进电机的原理
  7. Linux下PCI设备驱动程序开发[转]
  8. HDU 5857 Median(归并排序)
  9. 关于Oracle统计中关于操作系统的统计说明,oracle10个/11g的新特点 自动工作量资料档案库(AWR) 文平...
  10. 经常出现正常运行Windows所需的文件已被替换成无法识别的版本
  11. Holy Grail 圣杯布局详解
  12. VB→C++→C#→VB.NET,语言的共性和个性
  13. TF-IDF的原理概述
  14. c#语言中怎么实现延时功能,timer-在C#中创建“一次运行”延时功能的最佳方法...
  15. 基于matlab双反馈风力发电机系统Simulink仿真设计
  16. 计算机bios设置翻译,电脑bios设置的中文翻译图解
  17. KUKA ii感你所感:LBR iiwa开启灵敏型机器人新纪元
  18. pythonnumpy库求特征向量_Python使用numpy计算矩阵特征值、特征向量与逆矩阵
  19. 第二篇 基于自然语言处理的漏洞检测方法综述
  20. 阿里巴巴大数据之路-元数据

热门文章

  1. 浅谈一个大电容并联一个小电容的问题
  2. Folx pro Mac版-为Mac精心准备的下载器(迅雷替代品)
  3. Elasticsearch(二)——安装与下载
  4. 服务器如何进入pe系统安装,如何在PE服务器上安装Windows2000Server.doc
  5. Angular 图片预览组件
  6. [Python] 读取 rar/zip 压缩文件
  7. 淘宝数据采集思路分享
  8. android4.x 模拟器 出现软键盘
  9. 高通MSM8909平台L1系统修改LDO电压值
  10. PTC_Creo.9.0免安装