我的数据可以被视为10B条目(100M x 100)的矩阵,这是非常稀疏的(<1/100 * 1/100的条目非零) . 我想使用Tensorflow后端将数据输入到我制作的Keras神经网络模型中 .
我的第一个想法是将数据扩展为密集,即将所有10B条目写入一系列CSV,大多数条目为零 . 然而,这很快就压倒了我的资源(甚至做了ETL不堪重负的大熊猫,并导致postgres挣扎) . 所以我需要使用真正的稀疏矩阵 .
我怎么能用Keras(和Tensorflow)做到这一点?虽然numpy没有就这个想法进行大量讨论(例如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 's sparse matrixcs or going directly to Tensorflow' s稀疏矩阵 . 但我能够得到任何工作(或者甚至清楚知道要走哪条路!) .
我怎样才能做到这一点?
我相信有两种可能的方法:
-
保持它作为一个scipy稀疏矩阵,然后,当给Keras一个小批量,让它密集
-
一直保持稀疏,并使用Tensorflow稀疏张量
我也认为#2是首选,因为你会在整个过程中获得更好的表现(我相信),但#1可能更容易并且足够了 . 我会很高兴 .
如何实施?
1 回答
对不起,没有评论的声誉,但我认为你应该看一下这里的答案:Keras, sparse matrix issue . 我已经尝试了它并且它工作正常,但只有一个注意事项,至少在我的情况下,改组导致了非常糟糕的结果,所以我使用了这个稍微修改过的非改组替代方案:
它产生与keras的混乱实现(在
fit
中设置shuffle=True
)所实现的精度相当的精度 .