В чем разница между несколькими (одиночными выходами) NN и одиночными (многоцелевыми) NN? - PullRequest
0 голосов
/ 30 апреля 2019

Я работаю над этой следующей авторегрессионной проблемой с Keras / TF:

Входы:

m примеры x 10 временные шаги (длина последовательности) x 7 функции

(каждое значение является действительным)

Выходы:

m примеры x 4 цели / "метки" (реальные значения, которые я хочу предсказать)

Пока что с помощью LSTM с плотными слоями в конце (отредактировано) . Поэтому для одного примера я даю 7 объектов в последовательности размером 10, и я просто хочу получить 4 реальных значения (я предсказываю текущие значения в соответствии с предыдущими значениями).

У меня следующий вопрос :

В чем разница между предсказаниями:

а. 1 выход с размерами м х 4

б. 4 выхода с каждым размером м х 1

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

#python / Keras-TF
#a. multi output
model = Model(inputs = X_input, outputs = [Output1,Output2,Output3,Output4])
prediction = model.predict(X_test_normalized) #returns an inconvenient list of 4 [2 by 1 vectors] which in the end gives me m*4 real values as wanted

###### vs ######

#b. single output
model = Model(inputs = X_input, outputs = [Output1]) #vector of dimension 4
prediction = model.predict(X_test_normalized) #returns a m*4 matrix

1 Ответ

0 голосов
/ 30 апреля 2019

Большую часть времени это не имеет значения. Если ваши выходные слои плотные, каждый из них будет иметь матрицу весов n * 1. Если у вас есть один выходной слой, вес имеет форму n * 4. Как правило, один большой выходной слой быстрее, так как умножение одной большой матрицы часто быстрее, чем несколько маленьких.

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

...