【发布时间】:2017-05-23 03:55:37
【问题描述】:
我的数据可以看作是一个包含 10B 个条目 (100M x 100) 的矩阵,它非常稀疏(
我的第一个想法是将数据扩展为密集,即将所有 10B 条目写入一系列 CSV,其中大多数条目为零。然而,这很快就使我的资源不堪重负(即使是做 ETL 也让 pandas 不堪重负,导致 postgres 挣扎)。所以我需要使用真正的稀疏矩阵。
如何使用 Keras(和 Tensorflow)做到这一点?虽然 numpy 不支持稀疏矩阵,但 scipy 和 tensorflow 都支持。关于这个想法有很多讨论(例如 https://github.com/fchollet/keras/pull/1886 https://github.com/fchollet/keras/pull/3695/files https://github.com/pplonski/keras-sparse-check https://groups.google.com/forum/#!topic/keras-users/odsQBcNCdZg ) - 使用 scipy 的稀疏矩阵或直接进入 Tensorflow 的稀疏矩阵。但我找不到明确的结论,也无法让任何工作(甚至清楚地知道该走哪条路!)。
我该怎么做?
我相信有两种可能的方法:
- 将其保留为 scipy 稀疏矩阵,然后在给 Keras 一个 minibatch 时,使其变得密集
- 始终保持稀疏,并使用 Tensorflow 稀疏张量
我也认为#2 是首选,因为你会在整个过程中获得更好的性能(我相信),但#1 可能更容易并且足够。我会很高兴的。
如何实现?
【问题讨论】:
标签: tensorflow sparse-matrix keras