Я хотел бы спроектировать нейронную сеть для многозадачной задачи глубокого обучения.В API Keras мы можем использовать «последовательный» или «функциональный» подход для построения такой нейронной сети.Ниже приведен код, который я использовал для построения сети, используя оба подхода для построения сети с двумя выходами:
Последовательный
seq_model = Sequential()
seq_model.add(LSTM(32, input_shape=(10,2)))
seq_model.add(Dense(8))
seq_model.add(Dense(2))
seq_model.summary()
Функциональный
input1 = Input(shape=(10,2))
lay1 = LSTM(32, input_shape=(10,2))(input1)
lay2 = Dense(8)(lay1)
out1 = Dense(1)(lay2)
out2 = Dense(1)(lay2)
func_model = Model(inputs=input1, outputs=[out1, out2])
func_model.summary()
Когда я смотрю оба итоговых вывода для моделей, каждый из них содержит одинаковое количество обучаемых параметров:
До сих пор это выглядело нормально - однако я начинаю сомневаться в себе, когда строю обе модели (используя keras.utils.plot_model
), что приводит к следующим графикам:
ЛичноЯ не знаю, как их интерпретировать.При использовании подхода к многозадачному обучению я хочу, чтобы все нейроны (в моем случае 8) слоя перед выходным слоем соединялись с обоими выходными нейронами.Для меня это ясно видно в Функциональном API (где у меня есть два экземпляра Dense(1)
), но это не очень ясно из Последовательного API.Тем не менее, количество обучаемых параметров одинаково;предполагая, что также в Последовательном API последний слой полностью подключен к обоим нейронам в плотном выходном слое.
Может кто-нибудь объяснить мне различия между этими двумя примерами, или они полностью идентичны и приводят к одной и той же архитектуре нейронной сети?Кроме того, какой из них будет предпочтительным в этом случае?
Заранее большое спасибо.