Несколько входных слоев Python Keras - Как объединить / объединить? - PullRequest
0 голосов
/ 17 сентября 2018

В python я пытаюсь построить модель нейронной сети, используя Sequential в keras для выполнения двоичной классификации. Обратите внимание, что X - это пустой массив временных рядов данных 59x1000x3 (выборки x временных шагов x функций), а D - простой массив 59x100 (выборок x вспомогательных элементов). Я хочу пропустить временные ряды через слой lstm, а затем увеличить на более позднем слое сопутствующие функции (т.е. объединить два слоя).

Мой код для модели ниже:

def fit_model(X, y, D, neurons, batch_size, nb_epoch):
    model = Sequential()
    model.add(LSTM(units = neurons, input_shape = (X.shape[1], X.shape[2]))
    model.add(Dropout(0.1))
    model.add(Dense(10))
    input1 = Sequential()
    d = K.variable(D)
    d_input = Input(tensor=d)
    input1.add(InputLayer(input_tensor=d_input))
    input1.add(Dropout(0.1))
    input1.add(Dense(10))
    final_model = Sequential()
    merged = Concatenate([model, input1])
    final_model.add(merged)
    final_model.add(Dense(1, activation='sigmoid'))
    final_model.compile(loss = 'binary_crossentropy', optimizer = 'adam')
    final_model.fit(X, y, batch_size = batch_size, epochs = nb_epoch)
    return final_model

Я получаю следующую ошибку:

ValueError: слой Concatenate должен вызываться в списке как минимум из 2 входов

Я пытался использовать различные варианты слияния / объединения / функционального API / не функционального API, но я продолжаю приземляться с некоторой ошибкой. Я видел ответы, используя Merge из keras.engine.topology. Тем не менее, сейчас это кажется устаревшим. Будем благодарны за любые предложения по исправлению ошибки при использовании Sequential или по преобразованию кода в функциональный API. Спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

То, как вы используете слой конкатенации, неверно. Concatenate принимает только один аргумент, который является осью конкатенации. Чтобы вызвать слой на других тензорах, нужно вызвать объект сцепления слоя в списке тензоров.

merged = Concatenate(axis=-1)([model, input1])

Это должно исправить вашу проблему.

...