添加偏压到在Keras嵌入层

问题描述 投票:0回答:1

我建立使用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'])

不过,我似乎无法得到它的工作。该代码在运行,但我得到比不带偏见的型号更高的损耗和更低的精度。所以我thinknig我做错了。另外,当我检查的大小我仍然得到我的嵌入维数的大小,而不是嵌入维数+ 1

我想过用其他致密层(甚至不知道它的逻辑或有权这样做),以点积之后添加偏见,但我不能真正得到它的工作无论是。

我真的想一些帮助增加偏置到模型中。

python keras embedding bias-neuron
1个回答
2
投票

如果你想dimension + 1你要找的concatenate,而不是add

我不知道dot后的尺寸(点是怪异的行为,笑),但如果它的3D (batch, embedding, embedding),你将需要在连接前拉平。

© www.soinside.com 2019 - 2024. All rights reserved.