解决pytorch下出现multi-targetnotsupportedat的⼀种可
能原因
在使⽤交叉熵损失函数的时候,target的形状应该是和label的形状⼀致或者是只有batchsize这⼀个维度的。
如果target是这样的【batchszie,1】就会出现上述的错误。
改⼀下试试,⽤squeeze()函数降低纬度,
如果不知道squeeze怎么⽤的,
可以参考这篇⽂章。
这只是⼀种可能的原因。
补充:pytorch使⽤中遇到的问题
1. load模型参数⽂件时,提⽰torch.cuda.is_available() is False。
按照pytorch官⽅⽹页⼜安装了⼀次pytorch,⽽不是直接使⽤清华源,执⾏pip install torch,暂时不知道为什么。
2. 使⽤CrossEntropyLoss时,要求第⼀个参数为⽹络输出值,FloatTensor类型,第⼆个参数为⽬标值,LongTensor类型。否则
需要在数据读取的迭代其中把target的类型转换为int64位的:target = target.astype(np.int64),这样,输出的target类型为torch.cuda.LongTensor。(或者在使⽤前使⽤pe(torch.LongTensor)进⾏转换)。
3.
RuntimeError: multi-target not supported at /pytorch/torch/lib/THCUNN/generic/ClassNLLCriterion.cu
loss += F.cross_entropy( scores, captions )
出错原因:
scores, captions的维度与F.cross_entropy()函数要求的维度不匹配,
例如出错的维度为scores=[batch, vocab_size], captions=[batch, 1]
解决:
loss += F.cross_entropy( scores, captions.squeeze() )
注,这个scores必须是N*C维,C指类别数。
python安装教程非常详细
4. pytorch训练过程中使⽤⼤量的CPU资源
本机window10
linux服务器开启了多个进程
Linux服务器占⽤⼤量CPU
然⽽最简单的也是最好的解决办法:
经验证:export OMP_NUM_THREADS=1确实在pycaffe/pytorch中可以有效降低CPU使⽤率且提⾼程序运⾏速度,考虑可能是程序并不需要这么⼤的计算量,但是开了很多线程并⾏进⾏相同的计算,最后还需要同步结果,浪费了⼤量的计算量。
5. 在pytorch框架下编译模块的时候遇到 in <module>
raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.
解决:pytorch版本与其他库的版本不匹配。我当时装的是1.0.0,降低版本到0.4.0后问题解决。
6.pytorch设置GPU,os.environ['CUDA_VISIBLE_DEVICES']='X'要放在主程序的最前端,否则设置GPU可能⽆效。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。