0

我的 pytorch 神经网络的输出是 float64 类型的数据。该变量必须用作像素偏移量,因此我需要将其转换为长类型。

但是我刚刚发现转换 out=out.long() 将变量属性“.requires_grad”切换为 False。

如何将其转换为长期维护“.requires_grad”为真?

4

1 回答 1

2

通常,您不能将张量转换为基于整数的类型,同时保持其梯度属性,因为转换为整数是不可微分的操作。因此,您基本上有两个选择:

  1. 如果数据只需要作为不需要保持梯度的推理操作的 long 类型,则可以在转换为 long 类型之前依次反向传播损失。您也可以复制或使用torch.detach().

  2. 更改模型的输入输出结构,以便不需要整数输出。执行此操作的一种方法可能是为您尝试索引的原始张量中的每个值输出一个像素图。这将类似于为分割输出掩码的 NN。

如果没有更多关于您要完成的工作的详细信息,很难说出您的最佳前进道路是什么。请添加更多代码,以便此操作的上下文可见。

于 2021-04-30T18:37:56.663 回答