Keras顺序模型的多个嵌入层

时间:2018-06-12 19:23:55

标签: python keras keras-layer

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

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

不幸的是,我不知道如何将多个嵌入层作为输入集成到单个模型中。

我的代码看起来像这样,但它不起作用,我猜测多个嵌入层按顺序执行(第一个嵌入层是第二个输入,依此类推),而不是模型的多个输入源:

# urls.py

from django.urls import path

from app.views import PlayerScoreListView

urlpatterns = [
    path('playerscore/', PlayerScoreListView.as_view(), name='playerscorelist'),
]

我的问题是如何建立一个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...

我是在正确的轨道上,还是我的方法不正确,我需要以不同的方式建立模型?任何建议/例子都表示赞赏!

1 个答案:

答案 0 :(得分:4)

如果切换到functional API,首先要阅读,这可以轻松完成。然后,您可以使用表示不同列的多个输入构建模型:

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

这个层的要点是构建计算图的可调用对象。例如,您也可以通过简单地使用相同的嵌入层来共享列之间的嵌入层。