Добавить уровень внимания к существующей архитектуре CNN и LSTM - PullRequest
0 голосов
/ 19 апреля 2020

Я выполняю задачу «Заголовок изображения» с моделью слияния:

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?

...