Я выполняю задачу «Заголовок изображения» с моделью слияния:
1) Входным слоем CNN является вектор изображения длиной 2048, полученный с помощью предварительно обученного классификатора Imag eNet (As это не задача классификации, последний слой отбрасывается из этого классификатора Imag eNet)
2) LSTM для прогнозирования последовательностей слов для генерации заголовка
inputs1 = Input(shape=(2048,))
fe1 = Dropout(0.5)(inputs1)
fe2 = Dense(256, activation='relu')(fe1)
inputs2 = Input(shape=(max_length,))
se1 = Embedding(vocab_size, embedding_dim, mask_zero=True)(inputs2)
se2 = Dropout(0.5)(se1)
se3 = LSTM(256)(se2)
decoder1 = add([fe2, se3])
decoder2 = Dense(256, activation='relu')(decoder1)
outputs = Dense(vocab_size, activation='softmax')(decoder2)
model = Model(inputs=[inputs1, inputs2], outputs=outputs)
Так как до используется вектор внедрения обученного слова, задающий обучаемый параметр модели как False.
model.layers[2].set_weights([embedding_matrix])
model.layers[2].trainable = False
Я хочу добавить механизм мягкого внимания, чтобы вывод просто не зависел от последнего скрытого модуля декодера LSTM. Я новичок в концепции Attention-модели и прочитал некоторые блоги, которые демонстрируют создание механизмов Attention с нуля. Есть ли способ добавить Attention Layer к определенной выше модели LSTM с помощью встроенной библиотеки Keras?