Пайторч: ‘

#python #image-processing #deep-learning #pytorch

Вопрос:

Я пытаюсь рассчитать оценку пересечения по объединению (долговым распискам). Вот моя реализация кода, которая отлично работает.

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

    i = (predict amp; target).float().sum()
    u = (predict | target).float().sum()
    x = i/u
    IOU = x.item()

    return IoU
 

Но когда я запускаю свой модульный тест:

 def test_IoU1():
    pred = torch.tensor([[1, 0], [1, 0]])
    target = torch.tensor([[1, 0], [1, 1]])
    
    iou = IoU(pred,target)
    
    assert 0.66 <= iou
    assert iou <= 2/3
 

Я получаю:

  TypeError: '<=' not supported between instances of 'float' and 'function'
 

Как это исправить, ничего не меняя в модульном тесте? Спасибо

Ответ №1:

В этой функции

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

    i = (predict amp; target).float().sum()
    u = (predict | target).float().sum()
    x = i/u
    IOU = x.item()
    
    return IoU
 

Вы возвращаете IoU то, что является именем функции, я полагаю, вам нужно вернуть IOU . Так что правильным способом было бы —

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

    i = (predict amp; target).float().sum()
    u = (predict | target).float().sum()
    x = i/u
    IOU = x.item()
    
    return IOU