Как установить длину входного слоя в lstm

Я создаю модель LSTM для классификации некоторых данных обзора с помощью Keras. Вывод просто 1 или 0.

Я добавил слой встраивания слов перед тем, как передать текстовые данные в слой lstm. Часть моего кода показана ниже. Здесь max_feature — размер словарного запаса. Размер вектора Word — 2. Размер каждого документа — maxlen. Весь документ уже дополнен до одинаковой длины.

Однако меня всегда смущает длина слоя LSTM. Должна ли она быть той же длины, что и длина моих документов (maxlen)? Ввести все слова в каждый документ и получить результат?.....

Есть довольно много онлайн-источников, объясняющих LSTM. Но с точки зрения реализации, я чувствую, что не многие из них дают четкие объяснения...

Очень признателен, если кто-то может прояснить это.

# max_features: vocabulary size
# word vector size: 2
# maxlen: my document size, already padded to the same length
# Build our model
print('Build model...')
model = Sequential()
model.add(Embedding(input_dim=max_features, output_dim= 2, input_length=maxlen ))
model.add(LSTM(units= ???? ))  
model.add(Dense(1))

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

person zesla    schedule 24.02.2019    source источник


Ответы (1)


Количество единиц в LSTM не имеет отношения к размерам данных, единицы — это количество нейронов/узлов в слое LSTM. LSTM — это рекурсивная сеть, параметры которой используются снова и снова на одном и том же уровне: изображение взято с http://colah.github.io/posts/2015-08-Understanding-LSTMs/

«A» представляет ячейку LSTM, а количество «A» совпадает с вашей входной длиной. Единицы представляют собой скрытые измерения «А».

person ian    schedule 24.02.2019
comment
большое спасибо за разъяснения! Таким образом, количество A «автоматически настраивается» на ту же длину, что и длина моего документа. Еще один вопрос: как мой размер вектора слова (в данном случае 2) вписывается в структуру lstm? это размерность x0, x1, x2....? - person zesla; 24.02.2019
comment
Количество «А» в вашем случае равно maxlen (input_length = maxlen). Я не совсем уверен, что понимаю ваш вопрос по размеру вектора слова = 2, ваши слова, как я предполагаю, представлены размером 1-hot - input_dim=словарь (который, вероятно, больше 2). - person ian; 24.02.2019
comment
У меня есть слой встраивания слов. Если я правильно понимаю, он изучает векторы слов из словаря (word-to-vec). Для каждого слова оно представлено в виде векторной формы. Здесь я просто использую двумерный вектор слова, но это может быть любое измерение. Чего я не совсем понимаю, так это того, как эти векторы слов попадают в сеть lstm. - person zesla; 24.02.2019
comment
Слой внедрения преобразует каждое слово в вектор (w2v), затем вектор подается в LSTM путем матричного умножения. Например. S = a1 a2 Слой внедрения преобразует a1 в его векторное представление, а затем передает его в первую ячейку LSTM. Размерность матричного умножения: встроенное слово: |1| x |выход тусклый (2 в вашем случае)| Скрытый размер LSTM (единицы): |единицы|. Для лета преобразование из |1| х |выходной тусклый| к |1| x |единицы|, поэтому вложенный вектор |1| х |выходной тусклый| умножается на весовую матрицу |output dim| х |единиц|. Надеюсь это поможет. - person ian; 25.02.2019
comment
Итак, согласно схеме, которую вы там разместили, каждый x0, x1,.. является вектором слова (в моем случае 2d), верно? Каждый умножается на весовую матрицу 2xunit, что происходит в каждом блоке A. Большое спасибо. - person zesla; 25.02.2019
comment
Да вы правы. Более подробно: каждый вход представляет собой 1-горячий вектор размера dim словаря, слой встраивания преобразует его в 2d dim. - person ian; 25.02.2019