繁体   English   中英

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

[英]How to write a Keras Layer for basic vector/tensor multiplication

因此,我想将嵌入的输出乘以常数向量。 我使用的是功能性API,而不是顺序性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转换为张量,但是由于word_embeds上的None维度,Dot层或keras.backend.dot都给我带来了麻烦。 我不想使用Flatten,因为那样会将Flatten缩小到一个维度,而不是摆脱麻烦的维度。 那是我需要的重塑吗? 还是可以将word_embs [:]传递给lambda层或其他东西?

也许我只是对张量不够了解,但这非常令人沮丧。 如此高级的python库似乎应该能够轻松进行高中矩阵乘法,但我无法弄清楚。

您可以在Lambda中将1用作恒定张量的批次尺寸:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM