#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:
- Реальное лицо 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 к своему выводу. Я думаю, что для двоичной классификации должно быть что-то вроде этого