【问题标题】:Tracing back deprecated warning in pytorch在 pytorch 中追溯已弃用的警告
【发布时间】:2020-05-20 20:35:44
【问题描述】:

我正在使用以下代码在我的数据上训练 yolov3: https://github.com/cfotache/pytorch_custom_yolo_training/

但我收到了这个烦人的弃用警告

Warning: indexing with dtype torch.uint8 is now deprecated, please use a dtype torch.bool instead. (expandTensors at /pytorch/aten/src/ATen/native/IndexingUtils.h:20)

我尝试使用python3 -W ignore train.py 我尝试添加:

import warnings
warnings.filterwarnings('ignore')

但警告仍然存在。

我在 stackoverflow 上找到了这段代码,它在警告中打印该堆栈,

import traceback
import warnings
import sys

def warn_with_traceback(message, category, filename, lineno, file=None, line=None):

    log = file if hasattr(file,'write') else sys.stderr
    traceback.print_stack(file=log)
    log.write(warnings.formatwarning(message, category, filename, lineno, line))

warnings.showwarning = warn_with_traceback

这就是我得到的:

  File "/content/pytorch_custom_yolo_training/train.py", line 102, in <module>
   loss = model(imgs, targets)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "/content/pytorch_custom_yolo_training/models.py", line 267, in forward
    x, *losses = module[0](x, targets)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "/content/pytorch_custom_yolo_training/models.py", line 203, in forward
    loss_x = self.mse_loss(x[mask], tx[mask])
  File "/usr/lib/python3.6/warnings.py", line 99, in _showwarnmsg
    msg.file, msg.line)
  File "/content/pytorch_custom_yolo_training/train.py", line 29, in warn_with_traceback
    traceback.print_stack(file=log)
  /pytorch/aten/src/ATen/native/IndexingUtils.h:20: UserWarning: indexing with dtype torch.uint8 is now deprecated, please use a dtype torch.bool instead.

转到堆栈中提到的文件和函数,我没有找到任何 uint8 。 我该如何解决问题甚至停止收到这些警告?

【问题讨论】:

    标签: python-3.x pytorch yolo deprecation-warning


    【解决方案1】:

    发现问题。 线路:loss_x = self.mse_loss(x[mask], tx[mask]) mask 变量是 ByteTensor 已弃用。只需将其替换为BoolTensor

    【讨论】:

      【解决方案2】:

      这适用于我的情况:添加

      obj_mask = obj_mask.type(torch.BoolTensor)
      noobj_mask = noobj_mask.type(torch.BoolTensor)
      

      之前

      loss_x = self.mse_loss(x[obj_mask], tx[obj_mask])
      

      在in models.py.

      【讨论】:

      • 请不要添加 "thanks" 作为答案。它们实际上并没有提供问题的答案,并且可能被未来的访问者视为噪音。一旦你earn足够reputation,你将获得upvote answers你喜欢的特权。这样,问题的未来访问者将看到对该答案的更高投票数,并且回答者也将获得声誉积分奖励。见Why is voting important。
      【解决方案3】:

      这很好用

      obj_mask = obj_mask.bool()
      noobj_mask = noobj_mask.bool()
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 1970-01-01
        • 2020-12-06
        • 2015-03-23
        • 2019-07-09
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 1970-01-01
        相关资源
        最近更新 更多