python - 向 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)
,你需要在连接之前展平。
推荐阅读
- javascript - Blazor 互操作 LocalStorage 0.4.0 更改为 0.5.1
- meshlab - Meshlab - 纹理映射分辨率
- python-3.x - 如何从另一个 python 脚本退出一个 python 脚本但保持第一个 python 脚本运行?
- python - 在 Pandas Dataframe 中按天连接字符串列表
- ios - 检查用户连续使用应用程序的天数
- r - R - 从字符列中的值创建动态指标列
- time-complexity - 从 0 到 n 的所有斐波那契数的时间复杂度
- python - 为什么 scipy.spatial.ckdtree 运行速度比 scipy.spatial.kdtree 慢
- r - 是什么使负数成为lubridate?
- sql - 在 Active Record 中查询数据库之前删除空格在 Rails C 中有效,但在控制器中无效