Несколько входов в последовательную модель Keras - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь объединить выходные данные двух моделей и передать их в качестве входных данных для третьей модели, используя последовательную модель keras. Модель1:

inputs1 = Input(shape=(750,))
x = Dense(500, activation='relu')(inputs1)
x = Dense(100, activation='relu')(x)

Модель1:

inputs2 = Input(shape=(750,))
y = Dense(500, activation='relu')(inputs2)
y = Dense(100, activation='relu')(y)

Модель3:

merged = Concatenate([x, y])
final_model = Sequential()
final_model.add(merged)
final_model.add(Dense(100, activation='relu'))
final_model.add(Dense(3, activation='softmax'))

До сих пор я понимаю, что выходные данные двух моделей в виде x и y объединяются и передаются как входные данные для третьей модели. Но когда я подхожу это все как,

module3.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
module3.fit([in1, in2], np_res_array)

in1 и in2 - это два больших числа размером 10000 * 750, которые содержат мои тренировочные данные, а np_res_array - соответствующая цель.
Это дает мне ошибку, поскольку у объекта 'list' нет атрибута 'shape' Насколько нам известно, это то, как мы даем несколько входов в модель, но что это за ошибка? Как мне решить это?

1 Ответ

0 голосов
/ 27 октября 2018

Вы не можете сделать это с помощью последовательного API.Это объясняется двумя причинами:

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

  2. Метод последовательного API add() принимает в качестве аргумента экземпляр Layer, а не Tensorпример.В вашем примере merged - это Тензор (то есть выход конкатенационного слоя).

Кроме того, правильный способ использования слоя Concatenate выглядит следующим образом:

merged = Concatenate()([x, y])

Однако вы также можете использовать concatenate (обратите внимание на строчную букву "c"), его эквивалентный функциональный интерфейс, например:

merged = concatenate([x, y])

Наконец, чтобы иметь возможность построить ту третью модель, которая вам также нужнаиспользовать функциональный API .

...