Как добавить «ДРУГОЙ» класс в нейронную сеть?

#tensorflow #keras #deep-learning #neural-network #conv-neural-network

#tensorflow #keras #глубокое обучение #нейронная сеть #conv-нейронная сеть

Вопрос:

Я должен классифицировать реальные, поддельные и другие изображения, но у меня есть только набор данных реальных и поддельных лиц, как мне добавить «другой» класс, который не является ни реальным, ни поддельным лицом?

Вот как я загрузил свой набор данных

 TRAINING_DIR = "DatasetTraining Data"
train_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory(TRAINING_DIR,
                                                    batch_size=16,
                                                    target_size=(300, 300))
 

и это мой вывод

 Found 1944 images belonging to 2 classes.
 

Комментарии:

1. Если первые два класса являются «реальными» и «поддельными», то что такое «другое»?

2. 1. Реальное лицо 2. Поддельное лицо 3. Другой объект

3. Тогда я не думаю, что принятый ответ будет работать. Вероятность, скажем, 50% для изображения реального лица означает, что модель не уверена. Почему бы не использовать коллекцию изображений, которые не являются лицами, в качестве дополнительных обучающих данных? Кроме того, зачем вам нужна метка классификации «other»?

4. Существует соревнование по машинному обучению, и они сказали нам добавить «другой» класс. и они не предоставили данные, поэтому я и спрашивал.

Ответ №1:

  1. Реальное лицо 2. Поддельное лицо 3. Другой объект

Существует соревнование по машинному обучению, и они сказали нам добавить «другой» класс. и они не предоставили данные, поэтому я и спрашивал

Означает ли это, что вам не разрешено использовать какие-либо дополнительные данные? Если вы можете, возьмите несколько других изображений, которые не являются лицами. Изучите вторую отдельную модель M2 , которая имеет два класса: FACE и OTHER . Для этой модели пометьте все ваши изображения лиц (все реальные и поддельные вместе) как FACE .

Обучите свою исходную модель M1 так, как вы уже делаете, с двумя классами REAL и FAKE .

После обучения этих двух моделей выполните процесс принятия решений, подобный этому:

 For an input image `I`,

Does `M2` predict that the input is a `FACE`?
|--Yes: Does `M1` predict the image is `REAL`?
    |--Yes: Output "real image".
    |--No: Output "fake image".
|--No: Output "other"
 

Если вы не можете использовать какие-либо дополнительные данные, попробуйте ответ Андрея или изучите методы, которые могут обнаруживать исходные данные, не относящиеся к распределению.

Ответ №2:

Вы можете прогнозировать на основе выходных данных вашей сети. Если он предсказывает первый класс с вероятностью более 90% — тогда это первый класс. Если меньше 10% — тогда это второй. В противном случае — это «Другое»

Комментарии:

1. Можете ли вы сказать мне, как получить вероятность предсказания? В keras?

2. @AdarshWase Для мультиклассов — ваш вывод NN обычно имеет активацию softmax (которая выводит вероятности). Даже если это не так — вы можете применить softmax к своему выводу. Я думаю, что для двоичной классификации должно быть что-то вроде этого