Последовательный и функциональный API-интерфейс Keras для многозадачной обучающей нейронной сети - PullRequest
0 голосов
/ 25 сентября 2019

Я хотел бы спроектировать нейронную сеть для многозадачной задачи глубокого обучения.В 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()

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

Sequential and Functional .summary()

До сих пор это выглядело нормально - однако я начинаю сомневаться в себе, когда строю обе модели (используя keras.utils.plot_model), что приводит к следующим графикам: Sequential and Functional plot_model()

ЛичноЯ не знаю, как их интерпретировать.При использовании подхода к многозадачному обучению я хочу, чтобы все нейроны (в моем случае 8) слоя перед выходным слоем соединялись с обоими выходными нейронами.Для меня это ясно видно в Функциональном API (где у меня есть два экземпляра Dense(1)), но это не очень ясно из Последовательного API.Тем не менее, количество обучаемых параметров одинаково;предполагая, что также в Последовательном API последний слой полностью подключен к обоим нейронам в плотном выходном слое.

Может кто-нибудь объяснить мне различия между этими двумя примерами, или они полностью идентичны и приводят к одной и той же архитектуре нейронной сети?Кроме того, какой из них будет предпочтительным в этом случае?

Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

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

Просто требуемые выходы имеют различную форму

[(batch_size,2)]

vs

[(batch_size,),(batch_size,)]

и, следовательно, потери будут отличаться.

Суммарные потери усредняются для последовательной модели в этом примере, тогда как для функциональной модели они суммируются с двумявыходы (по крайней мере, с потерями по умолчанию, такими как MSE).

Конечно, вы также можете адаптировать функциональную модель, чтобы она была точно эквивалентна последовательной модели:

out1 = Dense(2)(lay2)
#out2 = Dense(1)(lay2)
func_model = Model(inputs=input1, outputs=out1)

Может быть, вы будететакже нужно несколько активаций после плотных слоев.

0 голосов
/ 25 сентября 2019

Разница между последовательным и функциональным API Keras:

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

функциональный API позволяет создавать модели, обладающие гораздо большей гибкостью, поскольку вы можете легко определять модели, гдеслои соединяются не только с предыдущим и следующим слоями.Фактически, вы можете соединить слои (буквально) с любым другим слоем.В результате становится возможным создание сложных сетей, таких как сиамские сети и остаточные сети.

Чтобы ответить на ваш вопрос:

Нет, эти API не являются одинаковыми, и количество уровней составляетнормально, что это одно и то же число.Какой использовать?Это зависит от того, какое использование вы хотите использовать в этой сети.Для чего ты тренируешься?Что вы хотите, чтобы вывод был?

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

Последовательные модели и функциональные модели

Я надеюсь, что помог вам лучше понять.

...