TensorFlow 中 feature_column.embedding_column 和 keras.layers.Embedding 的区别

thi*_*vin 5 input embedding deep-learning tensorflow

我几乎所有的项目都在使用keras.layers.Embedding。但是,最近我想摆弄 tf.data 并找到了feature_column.embedding_column

从文档:

feature_column.embedding_column - DenseColumn从稀疏的分类输入转换而来。当您的输入是稀疏的,但您想将它们转换为密集表示(例如,馈送到 DNN)时,请使用此选项。

keras.layers.Embedding - 将正整数(索引)转换为固定大小的密集向量。例如,[[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]] 该层只能用作模型中的第一层。

我的问题是,两个 api 是否在不同类型的输入数据上做类似的事情(例如输入 - [0,1,2] for keras.layers.Embedding 及其单热编码代表。[[1, 0,0],[0,1,0],[0,0,1] 为 feature_column.embedding_column)?

y.s*_*hyk 6

在查看了这两个操作的源代码后,我发现:

  • 这两种操作都依赖于功能性tensorflow.python.ops.embedding_ops
  • keras.layers.Embedding 使用密集表示并包含用于摆弄形状、初始化变量等的通用 keras 代码;
  • feature_column.embedding_column 依赖于稀疏并包含缓存结果的功能。

所以,你的猜测似乎是正确的:这两个做类似的事情,依赖于不同的输入表示,包含一些不会改变他们所做事情本质的逻辑。