【问题标题】:how to convert the output of a nural network to long type while maintaining the trainability如何在保持可训练性的同时将神经网络的输出转换为长类型
【发布时间】:2021-04-30 18:17:18
【问题描述】:

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

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

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

【问题讨论】:

  • 请提供一些代码,以便我们查看使用变量的上下文。例如,像素索引的结果是否用于计算损失?即您是否需要通过该操作进行反向传播,还是该操作仅用于推理?

标签: pytorch custom-training


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2017-09-08
    • 2023-01-01
    • 2020-05-07
    • 2020-08-11
    • 1970-01-01
    • 2021-02-11
    • 2013-03-19
    • 2021-12-22
    相关资源
    最近更新 更多