簡體   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