Я создаю собственную реализацию алгоритма Виолы-Джонса. Когда я обучаю классификатор и оцениваю его точность, он точно классифицирует 462 из 1000 примеров. Однако, когда я загружаю ту же модель из файла маринада и проверяю ее точность на том же наборе данных, ее точность внезапно становится 999 из 1000.
Я пытался варьировать гиперпараметры алгоритма, но точность сразу после обучения всегда равна 462/1000, что является количеством отрицательных примеров в наборе данных. Я считаю, что это означает, что clf.classify(x)
всегда возвращает 0, но я не понимаю, почему это больше не должно иметь место, когда я загружаю модель из файла маринада.
training = training[0:1000] #An array of tuples, first element in each tuple is a numpy array, the second is its classification
try:
clf = ViolaJones.load("viola_jones") #Loads classifier from pickle
print("Loaded classifier from file")
except Exception as e:
print("Failed to load classifier from file: %s" % str(e))
pos_num, neg_num = 0, 0
for x, y in training:
if y == 1:
pos_num += 1
else:
neg_num += 1
clf = ViolaJones(feature_num=2)
clf.train(training, pos_num, neg_num)
clf.save("viola_jones") #Saves classifier to pickle
correct = 0
for x, y in training:
prediction = clf.classify(x)
correct += prediction == y
print("Correctly labeled %d out of %d training examples" % (correct, len(training)))
Я запускаю файл один раз, чтобы обучить модель, оценить ее и сохранить в файл (для простоты я использую тренировочный набор и для обучения, и для оценки, хотя я знаю, что это плохая практика). При повторном запуске файла он вместо этого загрузит модель из файла и оценит ее. Заранее спасибо.