Keras Sequential模型的多重嵌入层

6

我正在使用Keras(tensorflow后端),想知道如何在Keras Sequential模型中添加多个嵌入层。

更具体地说,我的数据集中有几列具有分类值,我考虑使用独热编码,但已确定分类项的数量达到了数百个,导致列的数量太大且过于稀疏。寻找解决方案时,我发现Keras的嵌入层似乎非常优雅地解决了这个问题。然而,大多数示例(以及Keras文档)仅说明了一种具有单个嵌入层的简单情况。

不幸的是,我不知道如何将多个嵌入层整合成单个模型的输入。

我的代码看起来像这样,但它不起作用,我猜测多个嵌入层会依次执行(第一个嵌入层作为第二个嵌入层的输入等),而不是成为模型的多个输入源:

model = Sequential()
model.add(Embedding(500, 64, input_length=10))  # categorical col 1
model.add(Embedding(100, 64, input_length=10))  # categorical col 2
model.add(Embedding(500, 64, input_length=10))  # categorical col 3
model.add(Flatten... 
model.add(Dense...

我的问题是如何建立一个Keras序列模型,使我能够使用上面显示的三个嵌入层。具体在第一层和最后一层之间应该放什么:

model = Sequential()
#
# What goes here?
#
model.add(Dense...

我是否走在正确的道路上,或者我的方法不正确,需要用不同的方式建立模型?欢迎提供任何建议/示例!

1个回答

11

如果您转换到函数式 API,就可以轻松地完成此操作。首先阅读相关文档,然后可以构建一个具有代表不同列的多个输入的模型:

col1, col2, col3 = Input(shape=(10,)), Input(shape=(10,)), ...
col1_embeded = Embedding(500, 64)(col1)
col2_embedded = Embedding(100, 64)(col2)
# ...

这个要点是层是可调用对象,用于构建计算图。您还可以通过仅使用相同的嵌入层来共享列之间的嵌入层。


2
谢谢 - 我看到了那种方法,它确实可行,但我希望使用另一种方法("model.add")因为它更易读和简单(虽然没有太大的区别)。如果几天后还没有答案,我可能会退而使用你的方法。 - Eric Broda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接