python - 在 Keras 中向嵌入层添加偏差

标签 python keras embedding bias-neuron

我正在使用 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

我考虑过使用另一个Dense层(甚至不确定它是否合乎逻辑或正确)来在点积之后添加偏差,但我也无法真正让它发挥作用。

我真的需要一些帮助,在模型中添加偏差。

最佳答案

如果您想要dimension + 1,那么您正在寻找concatenate,而不是add

我不知道之后的尺寸(点是奇怪的行为,哈哈),但如果它是3D (批量,嵌入,嵌入),你将需要在串联之前展平。

关于python - 在 Keras 中向嵌入层添加偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617202/

相关文章:

Python 2 假定不同的源代码编码

python - 在没有自定义对象的情况下保存完整的 tf.keras 模型?

reflection - 使用嵌入在结构中的接口(interface)进行反射 - 如何检测 "real"函数?

python - MNIST : Disparity between training and validation accuracy 的 Keras VGG 模型

python - 从c中的嵌入式python代码加载DLL

go - Go中嵌入式私有(private)接口(interface)的可见性

python - (Tkinter) 放置对象后如何运行动画?

python - 在Python中正确终止线程

python - Pymongo 使用投影运算符查找

machine-learning - 将 keras CNN 应用于新数据集