在 pytorch 中追溯已弃用的警告
Posted
技术标签:
【中文标题】在 pytorch 中追溯已弃用的警告【英文标题】:Tracing back deprecated warning in 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')
但警告仍然存在。
我在 *** 上找到了这段代码,它在警告中打印该堆栈,
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
。
我该如何解决问题甚至停止收到这些警告?
【问题讨论】:
【参考方案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()
【讨论】:
以上是关于在 pytorch 中追溯已弃用的警告的主要内容,如果未能解决你的问题,请参考以下文章
ConnectivityManager.TYPE_WIFI 在代码中显示已弃用。我在 M 以上版本中使用了网络功能,想要删除已弃用的警告