2016-08-23 9 views
0

Я собираюсь построить нейронную сеть, которая имеет архитектуру более чем одного выходного уровня. Более конкретно, он предназначен для построения параллельных процедур поверх ряда сверточных слоев. Одна ветвь - вычислять результаты классификации (softmax-like); другой - получить результаты регрессии. Тем не менее, я застрял в разработке модели, а также в выборе функций потерь (критерий).Реализация факела нейронной сети с несколькими выходами

I. Должен ли я использовать контейнер для факелов nn.Parallel() или nn.Concat() для слоев ответвления поверх слоев conv (nn.Sequential())? Каков различие, за исключением формата данных.

II. Из-за выходных данных функция потери классификации и функция потери регрессии должны комбинироваться линейно. Мне интересно, выбирается ли nn.MultiCriterion() или nn.ParallelCriterion() относительно определенного контейнера. Или мне нужно настроить новый класс критериев.

III. Может ли кто-нибудь, кто сделал подобную работу, сказать мне, если факел нуждается в дополнительной настройке для реализации backprop для обучения. Я отношусь к проблеме структуры данных факельных контейнеров.

ответ

1
  1. Concat против Parallel отличается тем, что каждый модуль в Concat получает всю продукцию последнего слоя в качестве входных данных, в то время как каждый вход Parallel берета кусочка выхода последнего слоя. Для вашей цели вам нужно Concat, а не Parallel, так как обе функции потерь должны принимать весь вывод вашей последовательной сети.

  2. Основываясь на исходном коде MultiCriterion и ParallenCriterion, они делают практически то же самое. Важное отличие состоит в том, что в случае MultiCriterion вы предоставляете несколько функций потерь, но только одну цель, и все они вычисляются против этой цели. Учитывая, что у вас есть классификация и регрессионная задача, я предполагаю, что у вас разные цели, поэтому вам нужно ParallelCriterion(false), где false разрешает многозарядный режим (если аргумент trueParallelCriterion, похоже, ведет себя одинаково с MultiCriterion). Затем ожидается, что target будет таблицей целей для отдельных критериев.

  3. Если вы используете Concat и ParallelCriterion, факел должен уметь правильно вычислять градиенты. Оба реализуют updateGradInput, что должным образом объединяет градиенты отдельных блоков.