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 中遇到的问题(持续更新中)的主要内容,如果未能解决你的问题,请参考以下文章

java开发中遇到的问题及解决方法(持续更新)

java新手在实际开发中所遇到的问题及解决方法小结,(持续更新遇到的问题)

Zabbix遇到的问题——持续更新

iOS开发中遇到细节问题总结(持续更新...)

js编程中经常遇到的一些问题(持续更新)

js编程中经常遇到的一些问题(持续更新)