Функциональное API Keras альтернативное решение для pred_classes ()

Пожалуйста, обратитесь к моему предыдущему вопросу для получения справочной информации. Согласно ответу, предложенному Нассимом Беном . Я изучил модель двухпутевой архитектуры с использованием функционального API. Теперь я чувствую себя застрявшим, поскольку мне нужно предсказать класс каждого пикселя. вот код для него:

imgs = io.imread(test_img).astype('float').reshape(5,240,240) plist = [] # create patches from an entire slice for img in imgs[:-1]: if np.max(img) != 0: img /= np.max(img) p = extract_patches_2d(img, (33,33)) plist.append(p) patches = np.array(zip(np.array(plist[0]), np.array(plist[1]), np.array(plist[2]), np.array(plist[3]))) # predict classes of each pixel based on model full_pred = self.model_comp.predict_classes(patches) fp1 = full_pred.reshape(208,208) 

Но в соответствии с github-link pred_classes () недоступен. Итак, мой вопрос – есть ли другая альтернатива, которую я могу попробовать?

2 Solutions collect form web for “Функциональное API Keras альтернативное решение для pred_classes ()”

На самом деле, функции_показания недоступны для функциональных моделей, поскольку в некоторых случаях это не имеет смысла использовать. Однако для этого существует решение «один лайнер»:

 y_classes = keras.utils.np_utils.probas_to_classes(self.model_comp.predict(patches)) 

Это работает в keras 1.2.2, не уверен в keras 2.0, я не смог найти функцию в исходном коде. Но в этом нет ничего теневого, ваша модель выводит вектор вероятностей на принадлежность к каждому классу. То, что делает функция, это просто взять argmax и вывести класс, отвечающий наивысшей вероятности.

Надеюсь, это поможет.

Ответ Нассима велик, но я хочу поделиться с вами опытом, который у меня есть с похожими задачами:

  1. Никогда не используйте predict_proba для версии. Здесь вы можете найти, почему.
  2. Большинство методов, используемых для преобразования прогнозов в классы, не учитывают вашу статистику данных. В случае сегментации изображения – очень часто обнаружение объекта более важно, чем обнаружение фона. По этой причине я советую вам использовать пороговое значение, полученное из кривой прецизионного отзыва для каждого класса. В этом случае – вам нужно установить пороговое значение, для которого будет precision == recall (или она будет как можно ближе). После получения пороговых значений вам нужно написать свою пользовательскую функцию для предсказания класса.
Python - лучший язык программирования в мире.