问题描述
我的 pytorch 神经网络的输出是 float64 类型的数据。此变量必须用作像素偏移量,因此我需要将其转换为 long 类型。
但是我刚刚发现转换 out=out.long() 将变量属性“.requires_grad”切换为 False。
如何将其转换为长期维护的“.requires_grad”为真?
解决方法
通常,您不能在保持其梯度属性的同时将张量转换为基于整数的类型,因为转换为整数是一种不可微的操作。因此,您基本上有两个选择:
-
如果数据只需要作为不需要保持梯度的推理操作的 long 类型,您可以在转换为 long 类型之前按顺序反向传播损失。您也可以复制或使用
torch.detach()
。 -
改变模型的输入-输出结构,使得不需要整数输出。执行此操作的一种方法可能是输出一个像素图,其中您尝试索引的原始张量中的每个值都有一个值。这类似于输出掩码进行分割的神经网络。
如果没有关于您要实现的目标的更多详细信息,则很难说出您的最佳前进道路是什么。请添加更多代码,以便此操作的上下文可见。