我想通过训练具有超过十亿个特征维度的数据来训练DNN模型.因此第一层权重矩阵的形状将是(1,000,000,000,512).这个重量矩阵太大,无法存放在一个盒子里.
到目前为止,是否有任何解决方案来处理这些大变量,例如将大权重矩阵划分为多个框.
谢谢Olivier和Keveman.让我添加有关我的问题的更多细节.该示例非常稀疏,所有要素都是二进制值:0或1.参数权重看起来像tf.Variable(tf.truncated_normal([1 000 000 000,512],stddev = 0.1))
kaveman给出的解决方案看似合理,我会在尝试后更新结果.
这个问题的答案很大程度上取决于你想对权重矩阵执行什么操作.
处理如此大量特征的典型方法是将512每个特征的矢量视为嵌入.如果数据集中的每个示例只有10亿个特征中的一个,那么您可以使用该tf.nn.embedding_lookup函数查找小批量示例中存在的特征的嵌入.如果每个示例都有多个功能,但可能只有少数功能,那么您可以使用它tf.nn.embedding_lookup_sparse来查找嵌入.
在这两种情况下,您的权重矩阵可以分布在许多机器上.也就是说,这params两个函数的参数是张量列表.您可以对大的权重矩阵进行分片,并在不同的机器中找到分片.请查看分布式执行tf.device的入门知识,了解如何在多台计算机上分布数据和计算.
如果你真的想在权重矩阵上做一些密集操作,比如说,将矩阵与另一个矩阵相乘,这仍然是可以想象的,尽管在TensorFlow中没有现成的配方来处理它.你仍然会在机器上对你的重量矩阵进行分类.但是,您必须在权重矩阵的分布式块上手动构建一系列矩阵乘法,并合并结果.
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |