Мультиметка с бинарной классификацией в Керасе - PullRequest
0 голосов
/ 20 февраля 2019

В данный момент я работаю с классификацией изображений с использованием Keras, sci-kit learn и т. Д.

Я постараюсь объяснить всю проблему.Как я уже говорил, это классификация изображений с помощью мультиметки.Мой фрейм данных содержит 4000 микроскопических образцов масла, а метки представляют некоторые частицы в текущем образце.Я приведу один пример ниже.

Ну, все изображения в кадре данных помечены.Представьте, что каждое изображение содержит один массив с 13 значениями, уже в двоичном формате, и, конечно, 1 для положительного и 0 для отрицательного.

Например,

[0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0]

Это означает, что для каждого изображения,возможно иметь несколько выходов, в этом случае цель состоит в том, чтобы дать один образец масла CNN, и это может вернуть те частицы, которые присутствуют на изображении.

Я не знаю, достаточно ли это ясно,извините за это, теперь я объясню свою реальную проблему.

В моем CNN я уже установил выходной слой равным 13 (после количества меток в каждом изображении).Я не знаю почему, но когда я тренирую модель, предсказанный Y возвращает только одно значение, например:

Y predicted (sample 14): 3
Y predicted (sample 65): 11

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

Y predicted (sample 14): 3, 7, 9, 12
Y predicted (sample 65): 5, 8, 9, 11

Мне нужна помощь, чтобы решить эту проблему, потому что я застрял, пытаясь долго.Я ценю, если кто-то знает стратегию для этого.

Заранее спасибо!

1 Ответ

0 голосов
/ 20 февраля 2019

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

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

thresh = 0.5
p = model.predict(some_input)
classes = []
for prob, idx in enumerate(p):
    if prob > thresh:
        classes.append(idx)

print(classes)

После выполнения этого вы получите вектор переменного размера с различными классами, как и предсказывает модель.Порог (порог) - это параметр, который необходимо настроить, используя метрику производительности для двоичной классификации, применяемой к каждому классу.Вы также можете иметь разные пороговые значения для каждого класса.

Порог - это то, что вам нужно настроить.Теперь вы получите вектор 0 и 1, где 0 в

...