на Keras с бэкэндом Tensorflow, подгонка LSTM и нескольких плотных слоев параллельно на разных фракциях ввода - PullRequest
0 голосов
/ 28 апреля 2018

Я работаю над прогнозом регрессии, где у меня есть несколько сложных трехмерных последовательностей и некоторые функции, объясняющие некоторые ключевые характеристики последовательностей. Они проводятся на двух матрицах таких форм:

X1.shape, X2.shape
((9000, 300, 3), (9000, 106))

Я хочу передать их экземпляру модели, где матрица X1 обрабатывается LSTM, а матрица X2 парой плотных слоев. Мой план - объединить их перед выходным слоем.

Я планировал тренироваться по:

model.fit(zip(X1, X2), y, batch_size=BATCH, epochs=EPOCHS, validation_split=0.2)

Как построить модель, чтобы получить две матрицы и раздать их отдельно?

На данный момент у меня есть только стандартная модель для LSTM:

def model(sample_size=300, axis=3):
    inp=Input(shape=(sample_size, axis))
    x=LSTM(50, return_sequences=True)(inp)
    x=GlobalMaxPool1D(x)
    x=Dense(1)(x)
    model=Model(inputs=inp, ouputs=x)
    model.compile(loss='mean_squared_error', optimizer='adam',
                  metrics= ['mae'])
   return model

1 Ответ

0 голосов
/ 28 апреля 2018

Я думаю, что это должно работать

# First input
input1=Input(shape=(300,3))
x=LSTM(50, return_sequences=True)(input1)
x=GlobalMaxPool1D(x)
x=Dense(n)(x)

# Second Input
input2=Input(shape=(106))
y=Dense(n)(input2)

# Merge
merged=Concatenate([x,y])
merged=Dense(1)(merged)

# Define model with two inputs
model=Model(inputs=[input1,input2],outputs=merged)

Обе модели должны иметь одинаковое выходное пространство перед объединением. Затем вы можете передать список входных данных и Keras передаст его в соответствующих местах

model.fit([X1,X2],....)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...