Я разработал систему обнаружения улыбки. эта система основана на глубоком обучении и была реализована компанией MatConvnet. Последний слой является выходом системы и имеет 10 выходов в зависимости от количества улыбки человека. Я хочу преобразовать эти десять выходных данных в числовой вывод в диапазоне от 1 до 10 с помощью слоя регрессии. Как я могу сделать это в MatConvNet. Спасибо
Добавить слой регрессии в MatConvNet
Ответы (1)
Для слоя регрессии вам придется заменить последний слой (обычно softmax
или softmaxloss
) CNN своим собственным слоем для регрессии.
Чтобы определить свой собственный слой в MatConvNet, вам необходимо иметь следующее:
- Функция потерь
- Градиент этой функции потерь
Популярным выбором функции регрессионных потерь является возврат ошибки в квадрат. Вы должны посмотреть, как softmaxloss
реализовано в MatConvNet и как оно вызывается в examples/cnn_train.m
. Более подробную информацию можно найти в документах MatConvNet и в кратком руководстве по обратному распространению квадратичных потерь здесь< /а>.
Предложение: это не ответ на ваш вопрос. Однако, учитывая вашу проблему, проще преобразовать вашу 10 выходную классификацию в оценку, чем обучать регрессию всей CNN.
Назначьте номера от 1 до 10 вашим 10 классам улыбок. CNN даст апостериорную вероятность P(1...10) по всем этим классам для входного изображения. Просто возьмите взвешенную сумму над метками классов ( 1 * P (1) + 2 * P (2) + ....), чтобы получить действительное число для количества улыбки.