簡體   English   中英

向Keras的嵌入層添加偏見

[英]Adding bias to embedding layer in Keras

我正在使用keras構建模型,以便使用帶有負采樣的skipgram學習單詞嵌入。 我的輸入是一對單詞:(context_word,target_word),當然,標簽1為正數, 0為負數。 我需要做的是給模型增加偏差。 偏差應僅是每個輸入的目標詞的偏差,而不是兩個詞的偏差。

到目前為止,我有以下代碼:

input_u = Input((1,))
input_v = Input((1,))

item_embedding = Embedding(input_dim = items_size, 
                           output_dim = embed_dim,                           
                           name = 'item_embedding')

bias_embedding = Embedding(input_dim = items_size, 
                           output_dim = 1, 
                           embeddings_initializer = 'zeros', 
                           name = 'bias_embedding')

u = item_embedding(input_u)
v = item_embedding(input_v)
b_v = bias_embedding(input_v)

dot_p_layer = merge.dot([u, v], axes = 1)
with_bias = merge.add([dot_p_layer, b_v])
flattenned = Flatten()(with_bias)

output_layer = Dense(1, 
                     activation = 'sigmoid', 
                     use_bias = False)(flattenned)
print (output_layer.shape)

model = Model(inputs=[input_u, input_v], outputs=output_layer)
model.compile(loss='binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])

但是,我似乎無法正常工作。 代碼正在運行, 但是與沒有偏差的模型相比,我得到了更高的損失和更低的准確性。 所以我想我做錯了什么。 另外,當我檢查尺寸時,我仍然得到嵌入尺寸的尺寸,而不是嵌入 尺寸的 + 1

我考慮過使用另一個密集層(甚至不確定是邏輯上還是正確的做法),以便在點積之后添加偏差,但我也無法使其真正起作用。

我真的很想為模型增加偏見。

如果您想要dimension + 1 ,則在尋找concatenate ,而不是add

我不知道dot后的尺寸(點是奇怪的行為,大聲笑),但如果是3D (batch, embedding, embedding) ,則需要在連接之前展平。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM