RuntimeError:预期的标量类型为 Double 的对象,但在调用 _th_max 时为参数 #2 'other' 获得了标量类型 Float

Posted

技术标签:

【中文标题】RuntimeError:预期的标量类型为 Double 的对象,但在调用 _th_max 时为参数 #2 \'other\' 获得了标量类型 Float【英文标题】:RuntimeError: Expected object of scalar type Double but got scalar type Float for argument #2 'other' in call to _th_maxRuntimeError:预期的标量类型为 Double 的对象,但在调用 _th_max 时为参数 #2 'other' 获得了标量类型 Float 【发布时间】:2020-10-21 11:26:37 【问题描述】:

文件 “/home/jake/venv/lib/python3.7/site-packages/torchvision/models/detection/rpn.py”, 第 274 行,在 assign_targets_to_anchors match_quality_matrix = self.box_similarity(gt_boxes, anchors_per_image) 文件 “/home/jake/venv/lib/python3.7/site-packages/torchvision/ops/boxes.py”, 第 153 行,在 box_iou 中 lt = torch.max(boxes1[:, None, :2], boxes2[:, :2]) # [N,M,2] RuntimeError: Expected object of scalar type Double but got scalar 在调用 _th_max 时为参数 #2 'other' 键入 Float

得到以下错误,这是类型

annotations-> ['boxes': tensor([[131.5124, 169.4232, 165.8235, 209.7217],
        [157.2659, 185.7604, 199.0850, 210.4478],
        [184.4726, 171.3594, 211.5178, 210.3267],
        [170.5867, 154.1751, 211.7600, 188.7858],
        [162.8364, 156.2324, 182.1313, 186.7285],
        [131.2702, 149.8185, 149.4349, 172.3276],
        [192.0614, 140.5002, 208.4500, 155.2642],
        [165.2583, 140.5002, 188.2670, 158.0476],
        [169.5371, 131.9080, 193.3531, 151.1497],
        [131.1895, 133.2392, 140.1507, 156.3534]], device='cuda:0',
       dtype=torch.float64), 'labels': tensor([1, 1, 1, 1, 1, 1, 1, 1, 1, 1], device='cuda:0'), 'area': tensor([1382.6857, 1032.4053, 1053.8795, 1425.0382,  588.4218,  408.8705,
         241.9614,  403.7413,  458.2574,  207.1317], device='cuda:0'), 'iscrowd': tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], device='cuda:0')]

我认为 box 类型是 float64 。这导致问题如何解决它的两倍?

【问题讨论】:

【参考方案1】:

没有任何上下文很难判断。

但解决方法是为每个张量调用mytensor = mytensor.double(),同时调用mymodel = mymodel.double() 将数据和模型转换为相同的双精度类型。 或者,您可以将 .double() 替换为 .float() 用于浮点类型。两种方法都应该正常工作

【讨论】:

以上是关于RuntimeError:预期的标量类型为 Double 的对象,但在调用 _th_max 时为参数 #2 'other' 获得了标量类型 Float的主要内容,如果未能解决你的问题,请参考以下文章

pytorch RuntimeError: 标量类型 Double 的预期对象,但得到标量类型 Float

RuntimeError: 标量类型 Long 的预期对象,但参数 #2 'mat2' 的标量类型 Float 如何解决?

通过 DataLoader (PyTorch) 迭代:RuntimeError: 标量类型 unsigned char 的预期对象但序列元素 9 的标量类型浮点数

RuntimeError:预期的标量类型 Long 但发现 Float

Pytorch RuntimeError:参数#1 'indices' 的预期张量具有标量类型 Long;但得到了 CUDAType

Pytorch RuntimeError:预期的标量类型 Float 但找到了字节