gpt4 book ai didi

tensorflow - 在 Keras 和 Tensorflow 中使用稀疏矩阵

转载 作者:行者123 更新时间:2023-12-03 12:19:14 25 4
gpt4 key购买 nike

我的数据可以看作是一个由 10B 个条目 (100M x 100) 组成的矩阵,它非常稀疏(< 1/100 * 1/100 的条目非零)。我想使用 Tensorflow 后端将数据输入到我制作的 Keras 神经网络模型中。

我的第一个想法是将数据扩展为密集型,即将所有 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 可能更容易并且足够了。我会很高兴。

    如何实现?

    最佳答案

    对不起,没有评论的声誉,但我认为你应该看看这里的答案:Keras, sparse matrix issue .我已经尝试过它并且它工作正常,但只有一个注释,至少在我的情况下,改组导致非常糟糕的结果,所以我使用了这个稍微修改过的非改组替代方案:

    def nn_batch_generator(X_data, y_data, batch_size):
    samples_per_epoch = X_data.shape[0]
    number_of_batches = samples_per_epoch/batch_size
    counter=0
    index = np.arange(np.shape(y_data)[0])
    while 1:
    index_batch = index[batch_size*counter:batch_size*(counter+1)]
    X_batch = X_data[index_batch,:].todense()
    y_batch = y_data[index_batch]
    counter += 1
    yield np.array(X_batch),y_batch
    if (counter > number_of_batches):
    counter=0

    它产生的准确度与 keras 的 shuffled 实现(设置 shuffle=True in fit )所达到的准确度相当。

    关于tensorflow - 在 Keras 和 Tensorflow 中使用稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41538692/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com