Обучение PyBrain нескольким модулям вывода

Я хотел бы обучить сеть с несколькими выходными слоями.

in->hidden->out 1
          ->out 2

Это возможно? Если да, то как мне настроить наборы данных и тренера для выполнения обучения.


person Firestrand    schedule 03.03.2014    source источник


Ответы (3)


Поскольку вы хотите разделить свой вывод, чтобы иметь несколько регионов SoftMax, вы можете использовать PartialSoftmaxLayer, предоставленный PyBrain.

Обратите внимание, что он ограничен срезами одинаковой длины, но его код может вдохновить вас, если вам требуется собственный выходной слой:

https://github.com/pybrain/pybrain/blob/master/pybrain/structure/modules/softmax.py

person jjmontes    schedule 14.02.2015

Нет. У вас может быть несколько скрытых слоев, например

вход -> скрытый 1 -> скрытый 2 -> выход

В качестве альтернативы вы можете иметь несколько выходных нейронов (в одном выходном слое).

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

person andrelucas    schedule 06.03.2014
comment
Мой вопрос был о выходных слоях, а не о скрытых слоях, и моя проблема заключается в их обучении. Не похоже, что pybrain позволит обучать несколько выходных слоев. - person Firestrand; 09.03.2014
comment
Проблема в том, как рассчитывается ошибка обучения? Ошибка – это разница между идеальным и фактическим выходом. Если у вас есть 2 выходных слоя, какой из них вы используете? Если вы используете оба, это по сути то же самое, что объединение нейронов из ваших двух выходных слоев в один больший слой, как упоминал @lmjohns3. - person andrelucas; 09.03.2014

Вам как программисту потребуется больше работы, но если вы хотите иметь два разных вывода, вы всегда можете объединить свои выводы в один вектор и использовать его в качестве вывода для сети.

in --> hidden --> concatenate([out1, out2])

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

Однако, если бы вы могли использовать два отдельных вывода, вам все равно нужно было бы решить эту проблему, вероятно, каким-то образом взвесив две используемые вами метрики ошибок.

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

person lmjohns3    schedule 08.03.2014
comment
В настоящее время мне нужны 2 выходных слоя softmax, поэтому я не могу их объединить. Я согласен, однако в других случаях я мог бы просто объединить свои результаты в один слой. Что касается масштабов, то, конечно же, существует множество методов масштабирования, чтобы убедиться, что это не проблема. - person Firestrand; 09.03.2014