zl程序教程

您现在的位置是:首页 >  其它

当前栏目

RuntimeError: Boolean value of Tensor with more than one value is ambiguous

of is with value One more than Tensor
2023-09-27 14:19:49 时间

三种可能情形

Case 1

将含有两个及以上的布尔值的张量用在了 if 判断条件里:

a = torch.tensor([True, False])
if a:
    pass

出现这种错误的可能原因之一是想判断 a 不为 None,此时应改为如下语句

if a is not None:

需要注意的是,如果 a 只含一个布尔值,则判断不会出现错误:

a = torch.tensor([True])
if a:
    print(1)
# 1

Case 2

使用交叉熵损失时没有先实例化

inputs = torch.randn(6, 4)
target = torch.randint(4, (6, ))
loss = nn.CrossEntropyLoss(inputs, target)

应先实例化再计算损失:

criterion = nn.CrossEntropyLoss()
loss = criterion(inputs, target)

Case 3

对含有两个及以上的布尔值张量执行了 orandnot 这样的操作:

a = torch.tensor([True, False])
b = torch.tensor([False, True])
""" 以下三种操作都会报错 """
print(a or b)
print(a and b)
print(not a)

需要注意的是,如果 ab 都只含一个布尔值,则不会出现错误:

a = torch.tensor([True])
b = torch.tensor([False])
print(a or b)
# tensor([True])
print(a and b)
# tensor([False])
print(not a)
# False