Индексация FAISS и индексация набора данных не совпадаютPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Индексация FAISS и индексация набора данных не совпадают

Сообщение Anonymous »

Я пытаюсь вычислить отзыв после выполнения поиска HNSW в Faiss. По всему, я имею в виду следующую метрику: < /p>

Код: Выделить всё

Recall = TP / (TP + FN)< /code>
< /p>
, где я рассматриваю изображение как истинное положительное (TP), если оно появляется в результатах поиска топ-10, и как ложный отрицательный (Fn), если это не так. Я бы признателен за некоторую помощь. Таким образом, если я загружаю свой набор данных (давайте возьмем Cifar-10 в качестве примера) в нелупинном порядке и индекс последовательно, n-й индекс в FAIS должен соответствовать NTH Index в моем наборе данных. < /P>
Однако, когда я вычисляю напоминание, используя этот подход, значения являются странными. Я также использую параметр SELECT, как было предложено в этом ответе на переполнение стека, но я все еще сталкиваюсь с проблемами. следует: < /p>
import faiss

index = faiss.IndexHNSWFlat(1280, 100, faiss.METRIC_L2)
index.hnsw.efSearch = 2000
index.hnsw.efConstruction = 800

for data in tqdm(dataloader, desc="SYSTEM : Indexing Embeddings FAISS", unit="batch", leave=False): index.add(data.embedding)
< /code>
И ниже приведен код извлечения < /p>
Если имя файла запроса существует в результате TOP-10, то TP+= 1 else fn+= 1 < /p>
TP, FN = 0, 0

for data in tqdm(dataloader, unit="batch", leave=False):
D, I = index.search(data.embedding, 10)
filenames = [dataset[I(idx)].filename for idx in range(10)]

if data.filename in filenames:
TP += 1
else:
FN += 1

recall = TP / (TP + FN)
print(f"Recall= {round(recall, 3)}, TP = {TP}, FN = {FN}")
< /code>
и в настоящее время, shuffle dataLoader установлен на false. < /p>
dataloader = DataLoader(dataset, batch_size=1, shuffle=False)

Кроме того, набор данных правильно настроен. и набор данных может быть < /p>

Код: Выделить всё

dataset = torchvision.datasets.CIFAR10

Но я понял, что remark = 0 с tp = 0.
Я просмотрел свой код и тщательно изучил выход с функцией печати. Имя файла, извлеченное из DataLoader, правильно сохранено в переменной имени файла, а имена файлов в списке файлов действительно являются правильными, найденными Faiss.

Код: Выделить всё

seed = 111111
torch.manual_seed(seed)
np.random.seed(seed)
random.seed(seed)
Тем не менее, проблема сохраняется.>

Подробнее здесь: https://stackoverflow.com/questions/794 ... dont-match
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»