Многозадачное обучение в Керасе

12

Я пытаюсь реализовать общие слои в Keras. Я вижу, что Keras имеет keras.layers.concatenate, но я не уверен в документации о его использовании. Могу ли я использовать его для создания нескольких общих слоев? Как лучше всего реализовать простую общую нейронную сеть, как показано ниже, с использованием Keras?Общая нейронная сеть

Обратите внимание, что все формы входных, выходных и общих слоев для всех 3 NN одинаковы. Существует три общих уровня (и не общих уровней) в трех NN. Цветные слои уникальны для каждого NN и имеют одинаковую форму.

По сути, на рисунке представлено 3 идентичных NN с несколькими общими скрытыми слоями, за которыми следуют несколько скрытых слоев без общего доступа.

Я не уверен, как совместно использовать несколько слоев, как в примере Twitter, был только один общий слой (пример в API doc).

Адитья
источник

Ответы:

10

Input xDenseDense

x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
sub3 = Dense(16)(shared)
out1 = Dense(1)(sub1)
out2 = Dense(1)(sub2)
out3 = Dense(1)(sub3)

Теперь мы можем определить нашу модель следующим образом:

model = Model(inputs=x, outputs=[out1, out2, out3])

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

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

out = Dense(1)
out1 = out(sub1)
out2 = out(sub2)
out3 = out(sub3)

РЕДАКТИРОВАТЬ: объединение в основном противоположно тому, что вы хотите сделать, это вставка (промежуточные) выходы различных частей вашей сети в новый слой. Вы на самом деле хотите разделить на несколько разных частей.

Ян ван дер Вегт
источник
Большое спасибо. Когда мы это сделаем model.fit([data1, data2], [labels1, labels2]), это будет обучаться (обратное распространение) как единая модель, верно?
Адитья
1
Да, это будет просто одно: если с ярлыками связаны разные потери, вам нужно будет проделать дополнительную работу, в Керасе это не супер просто, но не невозможно, если они используют одну и ту же функцию потерь без перевеса, это работает из коробки
Ян ван дер Вегт
Это потребует переобучения единой модели. Что если у вас уже есть тренировочные веса для подмоделей? Есть ли способ использовать эти веса для создания вьетнам для объединенной модели?
shahar_m
@shahar_m извините, я не уверен, каков вариант использования. если веса тренировки унифицированной модели фиксированы, вы можете загрузить и заморозить эти слои.
Адитья