...
print('Build model...')
model = Sequential()
model.add(Embedding(max_features, 128))
model.add(LSTM(size, return_sequences=True, dropout_W=0.2 dropout_U=0.2))
model.add(GlobalAveragePooling1D())
model.add(Dense(1))
model.add(Activation('sigmoid'))
....
мне нужно, чтобы быть в состоянии взять среднее или максимальные векторов для всех временных шагов в образце после LSTM слоя, прежде чем дать это среднее или максимальный вектор к плотному слою в Keras.среднего или максимальное объединение с маскирующей поддержкой в Keras
Думаю, timedistributedmerge
смог это сделать, но это было устарело. Используя return_sequences=True
, я могу получить векторы для всех временных шагов в образце после слоя LSTM. Тем не менее, GlobalAveragePooling1D()
несовместим с маскировкой, и он рассматривает все временные шаги, тогда как мне нужны только незаметные временные шаги.
Я видел сообщения, рекомендующие слой Lambda
, но они также не учитывают маскировку. Любая помощь будет оценена по достоинству.
Обратите внимание, что вы не можете быть уверены в том, что Keras маскированные значения в 'x' равны нулю! Поэтому эта реализация дала бы неправильные результаты. – pir
Сама маска, введенная слоем 'Masking' и' Embedding', является двоичной. Конечно, у вас всегда могут быть слои, которые реализуют 'compute_mask' по-другому, но это не происходит в самом керасе, насколько я могу судить. – nemo
Да, маска двоичная. Это не то, что я говорю :) – pir