Keras - LSTM с вложениями по 2 слова на каждом шаге по времени - PullRequest
0 голосов
/ 31 августа 2018

Код ниже строит модель LSTM. Я хотел бы изменить эту точную модель, чтобы иметь в начале слой внедрения, который на каждом временном шаге получает 2 разных слова, встраивает их (с одним и тем же слоем внедрения): он объединяет их вложение, а затем следует остальной части моей модели .

k_model = Sequential()

k_model.add(LSTM(int(document_max_num_words*1.5), input_shape=(document_max_num_words, num_features)))
k_model.add(Dropout(0.3))
k_model.add(Dense(num_categories))
k_model.add(Activation('sigmoid'))

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

1 Ответ

0 голосов
/ 31 августа 2018

Если я правильно понимаю ваш вопрос, предполагая, что входные данные имеют форму (n_samples, n_timesteps, 2) (т.е. два слова на шаг), вы можете достичь того, что ищете, используя TimeDistributed обертку:

from keras import layers
from keras import models

n_vocab = 1000
n_timesteps = 500
embed_dim = 128
words_per_step = 2

model = models.Sequential()
model.add(layers.TimeDistributed(layers.Embedding(n_vocab, embed_dim), input_shape=(n_timesteps, words_per_step)))
model.add(layers.TimeDistributed(layers.Flatten()))
# the rest of the model

model.summary()

Сводка модели:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
time_distributed_12 (TimeDis (None, 500, 2, 128)       128000    
_________________________________________________________________
time_distributed_13 (TimeDis (None, 500, 256)          0         
=================================================================
Total params: 128,000
Trainable params: 128,000
Non-trainable params: 0
_________________________________________________________________
...