Реализация простого механизма внимания в Керасе - PullRequest
2 голосов
/ 17 марта 2019

Я хочу реализовать простой механизм внимания для объединения результатов модели CNN.

Конкретно, каждый пример моего ввода представляет собой последовательность изображений, поэтому каждый пример имеет форму [None, img_width, img_height, n_channels].

Используя оболочку TimeDistributed, я могу применить свой CNN, чтобы получить вывод формы [None, hidden_state_size].

Я хочу применить CNN к каждому изображению в последовательности, а затем вычислитьвектор внимания формы [None].Чтобы сделать это, я запускаю вывод TimeDistributed CNN через сеть TimeDistributed Dense с одним выходным блоком и вычисляю softmax по последовательности.

Затем вектор внимания должен быть умножен на результатTimeDistributed CNN и все должно быть суммировано, чтобы мы получили тензор формы [hidden_state_size].

В результате получается следующий код:

import tensorflow.keras as keras
import tensorflow.keras.layers as ll

inputs = ll.Input([None, 28, 28, 3])
x = inputs
x = ll.TimeDistributed(ll.Flatten())(x)
attention = ll.TimeDistributed(ll.Dense(1))(x)
attention = ll.Flatten()(attention)
attention = ll.Softmax()(attention)
outputs = ll.dot([x, attention], axes=[-2, -1])

model = keras.models.Model(inputs, outputs)

Размеры этой модели кажутсяпроверить, но будет ли это делать то, что я хочу?Или я где-то ошибся?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...