Как использовать обученную сиамскую сеть для прогнозирования меток для большого набора тестов с более чем 100 классами?

Должен ли я сравнивать каждое тестовое изображение с примером изображения из каждого класса? Тестовый набор содержит около 7400 изображений по 104 классам. Итак, это будут предсказания 7400 x 104?

Используя tensorflow на tpu, я смог довольно эффективно обучить модель. Однако прогнозирование меток с использованием описанного выше метода занимает очень много времени, и, кроме того, вызов прогнозирования модели вызывает утечку памяти, что в конечном итоге приводит к сбою ядра (память может увеличиться до 30+ ГБ и больше).


person Rashan Arshad    schedule 25.04.2020    source источник


Ответы (1)


Есть несколько способов сделать это:

  • (Не рекомендуется) Это в основном подмножество того, что вы на самом деле делаете. Вы можете взять несколько изображений из каждого класса и сравнить их с вашим тестовым изображением. Допустим, вы выбираете 5 изображений из каждого класса, поэтому вам нужно будет сделать 5 * 104 прогнозов.
  • Вы можете использовать модель K - ближайший сосед, где вам нужно будет сделать прогноз ваших 7400 (или подмножества этих) изображений только один раз, т.е. создать модель KNN, а затем напрямую использовать классификатор KNN для прогнозирования класса изображения.

Вы также можете обратиться к блогу, если у вас нет большого представления о KNN или вы не хотите смотреть на реализации кода.

person Akash Basudevan    schedule 25.04.2020
comment
Акаша спасибо за ответ! Быстрые дополнительные вопросы: я использовал эту ссылку в качестве справки, и похоже, что ваш первый пункт (мой текущий подход) эквивалентен проверке модели в разделе 9. В разделе 10 упоминается kNN, но модель не используется. . Не могли бы вы уточнить, как связать обученного сиамца с этим упомянутым kNN? Я получаю векторы из верхнего слоя cnn, а затем включаю kNN? - person Rashan Arshad; 25.04.2020
comment
еще одна мысль, или, может быть, после обучения нейронной сети я генерирую векторы признаков для помеченного набора поездов и немаркированного набора тестов. затем я тренирую классификатор kNN на помеченных векторах поездов, а затем предсказываю на немаркированных тестовых векторах? - person Rashan Arshad; 25.04.2020
comment
Да, конечно. 1. Обучите сиамских кошек с помощью обучающих данных и проверьте данные проверки. 2. Получите векторы из обученной модели для всех данных, которые вам нужны. 3. Используйте модель KNN для построения модели с использованием этих векторов. 4. Получить векторы нового изображения. 5. Используйте метод классификатора KNN, чтобы предсказать класс этой точки данных. - person Akash Basudevan; 26.04.2020
comment
спасибо! это дало мне много указаний. было продолжение, которое не имеет большого контекста, но у вас все еще может быть некоторое понимание. Моя сиамская модель получает около 0,84 AUC на проверочном наборе. однако точность knn составляет около 26%. это разумно? Я знаю, что 0,84 Auc не очень хорош, но я надеялся увидеть классификацию с точностью выше 26%. - person Rashan Arshad; 27.04.2020
comment
Вы пробовали играть со значением K ? - person Akash Basudevan; 27.04.2020
comment
Я сделал да, дошел до крайностей как на низком, так и на высоком уровне, и я определенно мог вызвать падение точности, но повышения ее выше 30% не происходит. Я немного лучше тренирую исходную модель и генерирую векторы разной длины, чтобы посмотреть, смогу ли я изменить результат. Я полагаю, что мог бы использовать эти векторы признаков с другой сетью conv и рассматривать это как уменьшение размерности, но не уверен, что это будет лучше, чем просто использовать что-то вроде эффективной сети из скачка. - person Rashan Arshad; 28.04.2020