如何通过特征直接嵌入列?

时间:2018-08-30 06:52:52

标签: tensorflow embedding

我正在为点击率学习广泛深入的模型。我的数据具有一个功能user_id,它具有超过2 ** 26个值。如何通过此功能获取嵌入列?我用了 user_id = tf.feature_column.categorical_column_with_hash_bucket('user_id', hash_bucket_size=2**26)user_id_emb = tf.feature_column.embedding_column(user_id, dimension=95),  但它显示出内存不足。

1 个答案:

答案 0 :(得分:0)

因此,2 ** 26约为64M。您需要95个嵌入尺寸。每个默认为float32。那是4个字节。每个user_id 4 * 95〜= 400字节因此,您需要64M * 400〜= 25.6 GB的内存来存储嵌入。

确保可以在系统上分配那么多。它应该全部放在ram中(交换会使一切变慢)。如果将其放置在GPU上,则将无法正常工作,因为大多数GPU都没有足够的可用内存。仅嵌入20个维度就应该使用大约5GB,这更可能适合内存。

最简单的方法是减少嵌入尺寸的数量。 如果有多个系统可用,则可以分片嵌入(有关变量相关功能,请参阅partitioner参数)。

您可以做的另一件事是将一些user_id聚集在一起(降低hash_bucket_size)。或通过其他功能的组合来替换user_id,这些功能将足以为您的模型描述用户。