Я хочу реализовать простой механизм внимания для объединения результатов модели 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)
Размеры этой модели кажутсяпроверить, но будет ли это делать то, что я хочу?Или я где-то ошибся?