Код: Выделить всё
Recall = TP + (TP + FN)< /code>
< /p>
, где я рассматриваю изображение как истинное положительное (TP), если оно появляется в результатах поиска топ-10, и как ложный отрицательный (FN ), если это не так. Я бы признателен за некоторую помощь. Итак, если я загружаю свой набор данных (давайте возьмем CIFAR-10 в качестве примера) в нелупинном порядке и индекс последовательно, n-й индекс в FAISS должен соответствовать NTH INDEX в моем наборе данных. < /P>
Однако, когда я вычисляю вспоминание, используя этот подход, значения странные. Я также использую параметр SELECT, как было предложено в этом ответе на переполнение стека, но я все еще сталкиваюсь с проблемами. Параметры HNSW осторожно после ответа на переполнение стека. 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
Но я получил это сказано, Recall = 0 с tp = 0.
Я просмотрел свой код и тщательно изучил вывод с функция печати. Имя файла, извлеченное из DataLoader, правильно хранится в переменной имени файла, а имена файлов в списке файлов действительно являются правильными, найденными Faiss. < /P>
Просто чтобы быть уверенным, я также исправил Семя со следующим кодом: < /p>
Код: Выделить всё
seed = 111111
torch.manual_seed(seed)
np.random.seed(seed)
random.seed(seed)
Подробнее здесь: https://stackoverflow.com/questions/794 ... dont-match