Итак, я хочу умножить выходные данные вложения на постоянный вектор. Я использую функциональный API, а не последовательный.
word_seq = Input(shape = (SEQ_LEN,), dtype = "int32", name = "word_seq")
word_embs = Embedding(output_dim = EMBED_DIM, input_dim = VOCAB_SIZE, input_length = SEQ_LEN)(word_seq)
Если я правильно понимаю, потому что я не дал форму партии, word_embs
должен иметь форму (None, SEQ_LEN, EMBED_DIM
).
У меня есть постоянный вектор (numpy array)
q
формы (SEQ_LEN
,). Поэтому я хочу выполнить умножение матриц q^T*
(матрица seq_len
на embed_dim внутри word_embs
).
Думаю, мне нужно будет использовать переменную keras, чтобы превратить q в тензор, но затем слой Dot или keras.backend.dot доставляют мне проблемы из-за этого измерения None в word_embeds. Я не хочу использовать Flatten, потому что это сведет его к одному измерению, а не просто избавит от проблемного. Это Reshape то, что мне нужно тогда? Или я могу передать word_embs [:] лямбда-слою или что-то в этом роде?
Может быть, я просто недостаточно знаю о тензорах, но это очень расстраивает. Кажется, что такая продвинутая библиотека на python легко может выполнять умножение матриц в старших классах, но я не могу этого понять.