Как реализовать софт-аргмакс в кафе? - PullRequest
0 голосов
/ 08 марта 2019

В структуре глубокого обучения Caffe есть слой argmax, который не дифференцируем и, следовательно, не может использоваться для сквозного обучения CNN.Может кто-нибудь сказать мне, как я мог бы реализовать мягкую версию argmax, которая является soft-argmax?

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

1 Ответ

0 голосов
/ 15 марта 2019

Я не получаю именно то, что вы хотите, но есть следующие варианты:

  1. Используйте потерю L2 для тренировки задачи регрессии (EuclideanLoss). Или SmoothL1Loss (от SSD Caffe от Wei Lui), или L1 (не знаю, где вы его получили).

  2. Используйте softmax с кросс-энтропийной потерей (SoftmaxWithLoss) для обучения задачи классификации с классами, соответствующими возможным значениям координаты x или y. Например, один слой потерь для x и один для y. SoftmaxWithLoss принимает метку как числовое значение и преобразует ее в int с помощью static_cast (). Но учтите, что реализация не проверяет, что приведенное значение находится в диапазоне 0 .. (num_classes-1), поэтому вы должны быть осторожны.

  3. Если вам нужно что-то более необычное, вам придется написать собственный слой на C ++, C ++ / CUDA или Python + NumPy. Это очень часто так, если вы уже не используете чью-либо реализацию.

...