Параллельные LSTM, каждая из которых работает на разных частях ввода - PullRequest
0 голосов
/ 26 февраля 2019

Какое изменение необходимо было сделать с этим кодом, чтобы получить модель, подобную изображенной на картинке?

        model = Sequential()
        model.add(LSTM(256, input_shape=(self.timestamps, len(columns)), activation=keras.activations.tanh,
                       recurrent_activation=keras.activations.tanh))
        model.add(Dense(6, activation=keras.activations.tanh))
        model.summary()
        model.compile(loss=keras.losses.mean_squared_error, optimizer=keras.optimizers.RMSprop())

stdScore

Например,если партия input для этой модели имеет форму (10,30,6), то я хочу, чтобы input[:,:15,:] перетек в левый LSTM и input[:,15:,:] - в правый LSTM.Как это делается?

1 Ответ

0 голосов
/ 26 февраля 2019

Во-первых, я бы предложил использовать Keras Functional API .Это имеет тенденцию упрощать определения модели.

Если вы хотите определить два входа для модели, вы можете определить свою модель следующим образом:

from keras.layers import Input, LSTM, concatenate, Dense
from keras.models import Model

input_1 = Input(shape=(15, 6), name='input_1')
input_2 = Input(shape=(15, 6), name='input_2')
lstm1 = LSTM(256, name='lstm1')(input_1)
lstm2 = LSTM(256, name='lstm2')(input_2)
concat = concatenate([lstm1, lstm2]) 
output = Dense(6, activation='tanh', name='dense')(concat)
model = Model(inputs=[input_1, input_2], outputs=output)

Если вы не хотите указывать нескольковходы, вы можете просто использовать слой Lambda для разделения входов:

from keras.layers import Input, LSTM, concatenate, Dense, Lambda
from keras.models import Model

input_ = Input(shape=(30, 6), name='input')
input_1 = Lambda(lambda x: x[:, :15, :])(input)
input_2 = Lambda(lambda x: x[:, 15:, :])(input)
lstm1 = LSTM(256, name='lstm1')(input_1)
lstm2 = LSTM(256, name='lstm2')(input_2)
concat = concatenate([lstm1, lstm2]) 
output = Dense(6, activation='tanh', name='dense')(concat)
model = Model(inputs=input_, outputs=output)

Для каждого примера вы должны вызывать функцию fit, соответственно:


Несколько входов:

model.fit(x=[input_1, input_2], y=y)

ИЛИ

model.fit(x={'input_1': input_1, 'input_2': input_2}, y=y)


Один вход:

model.fit(x=input_, y=y)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...