如何直接通过功能嵌入列?

问题描述 投票:1回答:1

我正在为ctr学习广泛而深入的模型。我的数据有一个功能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),但它显示了memeory。

tensorflow embedding
1个回答
0
投票

所以,2 ** 26约为64M。您想要95个嵌入维度。默认情况下,每个都是float32。那是4个字节。每个user_id 4 * 95~ = 400字节。因此,您需要64M * 400~ = 25.6 Gbytes的内存来存储嵌入。

确保您可以在系统上分配那么多。它应该都是ram(交换将使一切变得更慢)。如果你把它放在GPU上它将无法工作,因为大多数GPU没有那么多的可用内存。仅嵌入20个维度应使用大约5G字节,这更有可能适合内存。

最简单的方法是降低嵌入维度的数量。如果您有多个系统可用,则可以对嵌入进行分片(请参阅变量相关函数的partitioner参数)。

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

© www.soinside.com 2019 - 2024. All rights reserved.