错误:“bitwise_and_cpu”未针对“Float”实现

问题描述 投票:0回答:1

我希望为 ResNet50(预训练)模型生成 Intersection over Union (IoU) 分数。这是我计算 IoU 分数的函数:

def IoU(predict: torch.Tensor, target: torch.Tensor):

i = (predict & target).double().sum()
u = (predict | target).double().sum()
x = (i/u)
IoU = x.item()

return IoU

下面是实现 IoU 分数的函数:

def applyIoU(model, dataset):

IoU_score = []

for i in range(len(dataset)):
    
    image,true_mask = dataset[i]
    x_tensor = torch.from_numpy(image).to('cpu').unsqueeze(0)
    pred_mask = model.predict(x_tensor)
    true_mask = torch.from_numpy(true_mask).to('cpu').unsqueeze(0)
    IoU_score = IoU(pred_mask, true_mask)
    
assert type(true_mask) == torch.Tensor

return IoU_score

当我运行代码时,出现以下错误。有没有其他方法可以在不使用 Pytorch 中的 &| 运算符的情况下获得 IoU 分数?谢谢

    156 
--> 157     i = (predict & target).double().sum()
    158     u = (predict | target).double().sum()
    159     x = (i/u)

RuntimeError: "bitwise_and_cpu" not implemented for 'Float
python image-processing deep-learning pytorch image-segmentation
1个回答
0
投票

不同函数影响错误

RuntimeError: "bitwise_and_cpu" not implemented for 'Float'
表示PyTorch的Float类型数据在进行按位AND运算时不支持按位运算。位运算(如&)通常只适用于整数类型数据,不适用于浮点数。

解决办法: 要执行按位运算,您需要将浮点数转换为整数类型(例如 torch.uint8 或 torch.int)。或者,您可以使用逻辑运算符

(torch.logical_and and torch.logical_or)
,它处理浮点数(二值化后)并返回布尔类型的数据。

© www.soinside.com 2019 - 2024. All rights reserved.