如何为基本向量/张量乘法编写Keras层

2024-04-25 11:47:46 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想用一个常数向量乘以一个嵌入的输出。我使用的是函数式API,而不是Sequential。在

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*(通过在word_embs中嵌入dim矩阵seq_len)。在

我想我需要使用keras变量将q转换为张量,然后是一个点层或keras.backend.dot都给我带来了麻烦,因为这个词没有任何维度。我不想使用flant,因为这样可以将它减少到一个单一的维度,而不仅仅是摆脱麻烦的维度。重塑我需要的是什么?或者我可以把单词“_embs[:]传递给lambda层还是什么?在

也许我只是对张量了解不够,但这是非常令人沮丧的。看起来这样一个高级的python库应该很容易就能完成高中的矩阵乘法,但我搞不懂。在


Tags: inputlen常数矩阵embed向量seqkeras
1条回答
网友
1楼 · 发布于 2024-04-25 11:47:46

可以使用1作为Lambda中常量张量的批处理维度:

import keras.backend as K
[...]

def my_lambda(x):
    q_array = np.zeros((1, SEQ_LEN))
    q_array = ... # your value
    q = K.constant(q_array.T)
    return Dot()([q, x])

result = Lambda(my_lambda)(word_embs)

相关问题 更多 >

    热门问题