Конкатенация Кераса модели LSTM с моделью не-LSTM - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть два данных.Один - это временные ряды, а другой содержит такие функции, как секс, образование и т. Д., И я хочу объединить вывод модели LSTM и плотной модели.Тем не менее, я получил сообщение об ошибке (смотрите в конце).

Вот как выглядят данные:

enter image description here

enter image description here

И это код:

# PAY_data net
input1 = Input(shape=(6,1))
pay = LSTM(10)(input1)
pay = Dense(10, activation='relu')(pay)

# DEMO_data net
input2 = Input(shape=(5,1))
demo = Dense(10, activation='relu')(input2)
demo = Dense(10, activation='relu')(demo)

merge = concatenate([pay, demo])

hidden1 = Dense(10, activation='relu')(merge)

output = Dense(1, activation='sigmoid')(merge)
model = Model(inputs=[input1, input2], outputs=output)

print(model.summary())

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=    ['accuracy'])

model.fit([PAY_data, DEMO_data], y,nb_epoch=20, batch_size=50, verbose=2, validation_split=0.2)

, и это ошибка, которую я получаю:

enter image description here

1 Ответ

0 голосов
/ 13 ноября 2018

Поскольку слой Плотный применяется к последней оси его входных данных , и, учитывая, что вы указали форму ввода (5,1) для вашей "Сети демо-данных", форма вывода этой модели будет (None, 5, 10), и, следовательно, он не может быть объединен с выводом "сети Pay_data", который имеет форму вывода (None, 10). Чтобы решить эту проблему, вы можете удалить избыточную последнюю ось из PAY_data, используя np.squeeze():

PAY_data = np.squeeze(PAY_data)

, а также установите соответствующую форму ввода:

input2 = Input(shape=(5,))  # now the input shape is (5,) and not (5,1)
...