在运行某头发分割github代码时,pytorch 报错 “Subtraction, the -
operator, with a bool tensor is not supported.”
原代码为:
tp = y_pred * y == 1
tn = y_pred + y == 0
fp = y_pred - y == 1
fn = y - y_pred == 1
原因是pytorch最新版本中,不支持bool型与int型减法
测试:
a = torch.tensor([1, 1, 1, 0, 0, 0])
b = torch.tensor([True, False, True, False, True, False])
c = a + b
d = a * b
e = a - b
print(c)
print(d)
print(e)
显示:
RuntimeError: Subtraction, the `-` operator, with a bool tensor is not supported. If you are trying to invert a mask, use the `~` or `logical_not()` operator instead.
解决方案:
计算时把bool转化为int型的tensor
b.int()
a = torch.tensor([1, 1, 1, 0, 0, 0])
b = torch.tensor([True, False, True, False, True, False])
c = a + b
d = a * b
e = a - b.int()
print(c)
print(d)
print(e)
结果显示:
tensor([2, 1, 2, 0, 1, 0])
tensor([1, 0, 1, 0, 0, 0])
tensor([ 0, 1, 0, 0, -1, 0])
以此原理,原代码改为:
tp = y_pred * y == 1
tn = y_pred + y == 0
fp = y_pred.int() - y == 1
fn = y - y_pred.int() == 1
成功运行!!