如何在保持可训练性的同时将神经网络的输出转换为长类型

问题描述

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

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

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

解决方法

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

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

  2. 改变模型的输入-输出结构,使得不需要整数输出。执行此操作的一种方法可能是输出一个像素图,其中您尝试索引的原始张量中的每个值都有一个值。这类似于输出掩码进行分割的神经网络。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...