#tensorflow #conv-neural-network
#tensorflow #conv-нейронная сеть
Вопрос:
допустим, у меня есть приложение с CNN, обученное предсказывать кошек и собак, и пользователь вводит изображение яблока, а мой CNN предсказывает яблоко как кошку или собаку. Как заставить мое приложение сообщить, что пользователь ввел неправильное изображение, а не делает и предсказывает?
Хотелось бы знать, как вы, ребята, справляетесь с подобными ситуациями.
Комментарии:
1. вы можете фильтровать по вероятности: если вероятность (вывод softmax) кошек превышает 90% — это кошка, если вероятность собак превышает 90% — это собака, иначе — неправильное изображение
Ответ №1:
Что ж, для этого может быть много способов, однако, вот несколько простых подходов.
Подход: 1
Если у вас есть 2 класса в вашем наборе данных, просто добавьте третий класс, который является « unknown class
» и представляет некоторые случайные данные, что означает, что вы можете добавить весь мусор (выбросы), который вы хотите в этом классе, например, фотографии яблок, цветов, птиц и т. Д. (Где взять эти изображения? просто загрузите и объедините другой набор данных, например cifar-10 и т. Д.). Затем вы можете обучить свою сеть на этих данных, Сеть будет предсказывать третий класс « unknown class
«, когда это не собака и не кошка.
Подход: 2
Однако лучшим подходом (на мой взгляд) было бы иметь 2 нейрона в выходном слое с сигмовидной активацией, один из которых представляет вероятность быть кошкой, а другой — вероятность быть собакой. Таким образом, после тренировки, когда вы вводите изображение собаки, вы можете получить такое значение в своем выходном слое [0.9, 0.07]
(вероятность собаки 90% и кошки 7%). Таким образом, интуитивно, когда вы отправляете случайное изображение (например, изображение яблока), выходной уровень может выдавать следующий вывод [0.3, 0.27]
, поэтому сеть, похоже, не уверена, кошка это или собака. Теперь вам довольно легко установить пороговое значение, скажем, 60%, поэтому только тогда, когда модель предсказывает кошку или собаку с вероятностью более 60%, вы отправляете вывод / прогноз пользователю, в противном случае вы отправляете «неизвестный класс» в качестве вывода.