RuntimeError: derivative for floor_divide is not implemented

问题描述:pytorch训练网络的过程中,发现在loss.backward()时出现RuntimeError: derivative for floor_divide is not implemented的错误,最终发现在搭建网络过程中,除以一个常数的时候使用了“//”,是一个整数除法,使得网络训练过程中出现了整数,所以出现了上述错误。

解决方法:网络搭建过程中,使用“/”浮点数除法代替“//”整数除法时,错误解决。

### 回答1: 这个错误是由于在使用 PyTorch 的 CUDA 加速时,尝试对 'long' 类型的张量执行 'addmm' 操作,但是该操作并没有被实现。建议将张量类型转换为 'float' 或 'double' 类型,或者使用 CPU 进行计算。 ### 回答2: 这个错误是指在PyTorch的代码中,使用了“addmm_cuda”函数,但是这个函数没有针对‘long’数据类型进行实现,导致出现了“not implemented”错误。addmm_cuda函数是PyTorch中的一个矩阵操作函数,用于将两个矩阵相乘并加上一个偏置矩阵得到一个新的输出矩阵。 如果在代码中使用long类型,这个函数就会报错,因为long类型是在CPU上实现的,而addmm_cuda是PyTorch中的一个GPU函数,专门针对GPU上的float和double数据类型进行优化的。因此,如果想要使用这个函数,应该使用float或double类型的数据。 要解决这个错误,一种方法是在代码中使用float或double数据类型,尤其是当使用GPU计算时,需要确保数据类型的正确性。另外一种方法是通过更改代码来实现针对long数据类型的addmm_cuda函数,不过这需要相当高的技术水平和精确度,建议不要尝试。 总之,在进行PyTorch代码开发时,需要注意数据类型的选择和正确性,避免出现类似的错误。 ### 回答3: 该错误通常是由于使用PyTorch的GPU版本时,尝试在数据类型为long的张量上执行addmm操作而导致的。 PyTorch是一个用于深度学习的Python库,可以使用GPU进行高效计算。CUDNN(NVIDIA用于深度神经网络的最新库)可以加速多个操作,例如矩阵乘法,但是CUDNN仅用于float和double类型的张量。因此,如果在数据类型为long的张量上执行addmm操作,将无法使用CUDNN进行加速,这就是出现“addmm_cuda not implemented for 'long'”错误的原因。 解决此错误的方法是将数据类型从long更改为float或double。可以使用张量的type方法轻松更改数据类型。例如,x = x.type(torch.FloatTensor)将张量x的类型从long更改为float。 此外,还可以使用数据类型适当的初始化方法来避免此错误。例如,torch.zeros和torch.ones的默认类型为float,而torch.zeros(n,dtype = torch.long)和torch.ones(n,dtype = torch.long)的类型为long。 总之,务必注意数据类型的选择,并确保在执行操作之前,了解所用数据类型是否有GPU加速器的支持。使用type方法可以轻松地更改数据类型。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值