Я хотел бы обучить сеть с несколькими выходными слоями.
in->hidden->out 1
->out 2
Это возможно? Если да, то как мне настроить наборы данных и тренера для выполнения обучения.
Я хотел бы обучить сеть с несколькими выходными слоями.
in->hidden->out 1
->out 2
Это возможно? Если да, то как мне настроить наборы данных и тренера для выполнения обучения.
Поскольку вы хотите разделить свой вывод, чтобы иметь несколько регионов SoftMax, вы можете использовать PartialSoftmaxLayer
, предоставленный PyBrain.
Обратите внимание, что он ограничен срезами одинаковой длины, но его код может вдохновить вас, если вам требуется собственный выходной слой:
https://github.com/pybrain/pybrain/blob/master/pybrain/structure/modules/softmax.py
Нет. У вас может быть несколько скрытых слоев, например
вход -> скрытый 1 -> скрытый 2 -> выход
В качестве альтернативы вы можете иметь несколько выходных нейронов (в одном выходном слое).
Технически вы можете настроить любое расположение нейронов и слоев, соединить их как угодно и назвать их как хотите, но описанный выше общий способ сделать это.
Вам как программисту потребуется больше работы, но если вы хотите иметь два разных вывода, вы всегда можете объединить свои выводы в один вектор и использовать его в качестве вывода для сети.
in --> hidden --> concatenate([out1, out2])
Возможно, существенным недостатком этого подхода является то, что если два выхода имеют разные масштабы, то объединение исказит метрику ошибок, которую вы используете для обучения сети.
Однако, если бы вы могли использовать два отдельных вывода, вам все равно нужно было бы решить эту проблему, вероятно, каким-то образом взвесив две используемые вами метрики ошибок.
Потенциальные решения этой проблемы могут включать определение пользовательской метрики ошибок (например, с использованием варианта взвешенного квадрата ошибки или взвешенной кросс-энтропии) и/или стандартизацию двух выходных наборов данных, чтобы они существовали в общей шкале.