Как в Python прописать условие if, чтобы получить ожидаемый ответ?

Прохожу циклом по папкам с файлами, где записаны голоса разных людей: в каждой папке spk директории speakers - голоса одного человека в отдельных файлах.

Есть две переменных-счетчика: общее количество проходов num_total и количество положительных ответов num_true (при сравнении дали тензор tensor([True])).

Если я не в порядке цикла, а вручную подставляю в метод библиотеки speechbrain для сравнения 2 голоса одного человека, система их сравнивает корректно и дает положительный тензор true. Однако распечатав переменные-счетчики из цикла, вижу: num_true равен нулю. Что не так?

Код:

# подход распознавания на основе ECAPA: сравниваем голоса 
!pip install speechbrain
from speechbrain.pretrained import SpeakerRecognition
import os
from itertools import combinations


num_true=0
num_total=0

for root, dirs, files in os.walk('/content/drive/MyDrive/speakers'):
    if not files:
        continue
    res = list(combinations(files, 2)) # получаем списки кортежей: [(файл 1, файл 2), (файл 1, файл 3)...(файл 3, файл 4)]
    # print(res)

    for tuples in res:         # идем по каждому кортежу в списке
        verification = SpeakerRecognition.from_hparams(source="speechbrain/spkrec-ecapa-voxceleb", savedir="pretrained_models/spkrec-ecapa-voxceleb")
        score, prediction = verification.verify_files(os.path.join(root, tuples[0]), os.path.join(root, tuples[1]))
        num_total+=1
        if prediction == 'tensor([True])':
            num_true+=1

# считаем метрику accuracy:
# if num_total !=0:
#   accuracy = num_true/num_total
#   print(accuracy)
# else:
#   print('На ноль делить нельзя')

# распечатываем переменные-счетчики:
print(num_true)
print(num_total)
print(prediction, type(prediction) ) # для примера выполнил отдельно для одного сравнения файлов
# 0
# 44
# tensor([True]) <class 'torch.Tensor'>

Ответы (2 шт):

Автор решения: Max

В вашем случае сам объект prediction это метод, его значение не есть строкой с которой вы его сравниваете. Если хотите сравнивать его со своей строкой вам нужно написать так:

if str(prediction) == 'Tensor([True])':

Или так:

if prediction.__str__() == 'Tensor([True])':

Таким образом вы просите свой объект prediction вернуть его строковое значение и тогда уже сравниваете две строки.

→ Ссылка
Автор решения: Алексей Казанцев

Решил задачу еще одним способом: благодаря общему разуму, реализовал так:

if prediction == torch.tensor([True]):
    ...

Все прочее, как указал в коде ранее

→ Ссылка