pytorch 中遇到的问题(持续更新中)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch 中遇到的问题(持续更新中)相关的知识,希望对你有一定的参考价值。
参考技术A 什么是inplace operation:in-place operation在pytorch中是指改变一个tensor的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值。可以把它成为原地操作符。pytorch中,通常加后缀“_”来表示原地运算符,例如.add_(),或者python中的 “+=”。
这种情况通常是数据还在cpu上,又要用到gpu上计算导致的,可以尝试数据后面加上.cuda()。
cpu上的tensor和gpu上的tensor是太一样的:PyTorch中的数据类型为Tensor,Tensor与Numpy中的ndarray类似,同样可以用于标量,向量,矩阵乃至更高维度上面的计算。PyTorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU上的Tensor加cuda()函数得到。通过使用Type函数可以查看变量类型。系统默认的torch.Tensor是torch.FloatTensor类型。例如data = torch.Tensor(2,3)是一个2*3的张量,类型为FloatTensor; data.cuda()就将其转换为GPU的张量类型,torch.cuda.FloatTensor类型。
尝试将torch.LongTensor转换为:torch.FolatTensor类型。
函数或者可调用对象使用时候没有加括号。
(1)只要是用到for循环都是在cpu上进行的,会消耗巨量的时间
(2)只要是用到生成矩阵这种操作都是在cpu上进行的,会很消耗时间。
(3)数据往cuda()上搬运会比较消耗时间,也就是说 .cuda()会比较消耗时间,能去掉就去掉。
(4)在服务器上,如果可以在一块gpu上运行就不要采用net = nn.DataParallel(net),这种gpu并行方式比单个gpu要耗时。
关于断点调试: pycharm单步调试 - qq_33485434的博客 - CSDN博客
x= torch.tensor(x) ------> x= x.clone()
这个好奇怪,对于x= torch.matmul(x,one_hot_copy), 只要提前把x和one_hot_copy后面加上.float()就可以解决。
二维张量相乘: 二维矩阵相乘 A*B: A.mm(B), 多维矩阵相乘 A*B: A.matmul(B), 注意需要long()数据类型。tensor.mul(tensor)
以上是关于pytorch 中遇到的问题(持续更新中)的主要内容,如果未能解决你的问题,请参考以下文章