【问题标题】:How tensorflow deals with large Variables which can not be stored in one boxtensorflow如何处理无法存储在一个盒子中的大变量
【发布时间】:2016-11-16 02:08:47
【问题描述】:

我想通过训练具有超过 10 亿个特征维度的数据来训练 DNN 模型。所以第一层权重矩阵的形状将是 (1,000,000,000, 512)。这个权重矩阵太大了,不能放在一个盒子里。

到目前为止,是否有任何解决方案来处理如此大的变量,例如将大权重矩阵划分为多个框。

更新:

感谢 Olivier 和 Keveman。让我添加有关我的问题的更多详细信息。 该示例非常稀疏,所有特征都是二进制值:0 或 1。参数权重看起来像 tf.Variable(tf.truncated_normal([1 000 000 000, 512],stddev=0.1))

kaveman 给出的解决方案看起来很合理,我会在尝试后更新结果。

【问题讨论】:

  • 你的数据中有什么结构吗?例如,它是每天/每秒都有数据的时间序列吗?
  • 每个数据示例都是稀疏张量,只有不到 1000 个非零值。权重矩阵是输入层和第一个隐藏层之间的连接权重。因为第一个隐藏层的大小是 512,权重矩阵看起来像 tf.Variable(tf.truncated_normal([1 000 000 000, 512],stddev=0.1))。
  • 所以这是分类数据?您应该使用其他信息更新您的问题。无论如何,第一层已经有 512G 的参数将被证明无法优化,所以你需要找到另一种方法
  • @HanbinZheng 有更新吗?

标签: tensorflow


【解决方案1】:

这个问题的答案很大程度上取决于你想对权重矩阵执行什么操作。

处理如此大量特征的典型方法是将每个特征的512 向量视为嵌入。如果数据集中的每个示例都只有 10 亿个特征中的一个,那么您可以使用 tf.nn.embedding_lookup 函数来查找小批量示例中存在的特征的嵌入。如果每个示例都有多个特征,但可能只有少数几个,那么您可以使用 tf.nn.embedding_lookup_sparse 来查找嵌入。

在这两种情况下,您的权重矩阵都可以分布在多台机器上。也就是说,这两个函数的 params 参数是张量列表。您将分片您的大型权重矩阵并在不同的机器中定位分片。请查看tf.deviceprimer 的分布式执行,了解如何将数据和计算分布到多台机器上。

如果您真的想对权重矩阵进行一些密集运算,例如,将矩阵与另一个矩阵相乘,这仍然是可以想象的,尽管 TensorFlow 中没有现成的配方来处理这个问题。你仍然会在机器上分割你的权重矩阵。但是,您必须在权重矩阵的分布式块上手动构造一系列矩阵乘法,然后组合结果。

【讨论】:

  • 谢谢,我会试试这些方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
相关资源
最近更新 更多