Как заставить LSTM изучать монотонные последовательности? - PullRequest
0 голосов
/ 27 апреля 2018

Я использую LSTM с Keras для прогнозирования набора последовательностей. Вот моя базовая модель:

inputs = Input(shape=(1,seq_dim))       #seq_dim = 2
# shape = (timesteps, featdim) = (1,2) since my input sequences are pair of values
# I want to predict the sequence of the fist values in the pairs

se = LSTM(lstm_size)(inputs)   

out = Dense(1)(se)   # I want to forecast one value
model = Model(inputs=inputs, outputs=out)

Я точно знаю, что последовательности начинаются с 0 и являются монотонными (не убывающими). Я пробовал со слоем Maximum ()

max_out = Maximum()([output_seq,input_seq])

Здесь модель

inputs = Input(shape=(1,seq_dim))       
# shape = (timesteps, featdim) = (1,2) since my input sequences are pair of values
# I want to predict the sequence of the fist values in the pairs

se = LSTM(lstm_size)(inputs)   

out = Dense(1)(se)   # I want to forecast one value
# max between the output and the previous value of the sequence (current input)
max_out = Maximum()([out,inputs[:,:,0]]) 
model = Model(inputs=inputs, outputs=max_out)

однако при компиляции модели возникает ошибка:

"AttributeError: 'Tensor' object has no attribute '_keras_history'"

Я также пытался использовать слой Lambda, но он вызывает ту же ошибку.

max_out = Lambda(lambda x: K_BACKEND.max(x))([out,inputs[:,:,0]])

Как я могу добавить это ограничение к моей модели? Можно ли это сделать в архитектуре Definitio (как я пытаюсь сделать), или отредактировав функцию потерь? заранее спасибо

1 Ответ

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

Попробуйте это max_out = Lambda( lambda oi: K_BACKEND.maximum( oi[0], oi[1][:,:,0], axis=-1)),output_shape=lambda oi : oi[0] )([out,inputs]).

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