【问题标题】:Working on google collab with python : garbage collector is not working?使用 python 在 google colab 上工作:垃圾收集器不起作用?
【发布时间】:2019-08-02 11:57:41
【问题描述】:

我正在使用 python 进行 google collab,并且我有一个 12Gb Ram。 我正在尝试使用 google 预训练的 word2vec 来用向量表示句子。 即使它们没有相同数量的单词,我也应该有相同长度的向量,所以我使用了填充(这里句子的最大长度是我的变量最大值) 问题是每次我想创建一个包含所有向量的矩阵时,我都会很快耗尽 RAM 内存(在 20k th / 128k 向量上)

这是我的代码:

final_x_train = []
l=np.zeros((max,300)) # The legnth of a google pretained model is 300 
for i in new_X_train: 
    buildWordVector(final_x_train, i, model, l)
    gc.collect() #doesn't do anything except slowing the run time


def buildWordVector(new_X, sent, model, l):    
    for x in range(len(sent)):
        try:
            l[x]= list(model[sent[x]])
            gc.collect() #doesn't do anything except slowing the run time
    except KeyError:
        continue
    new_X.append([list(x) for x in l])

我拥有的所有变量:

     df:  16.8MiB
     new_X_train: 1019.1KiB
     X_train: 975.5KiB
     y_train: 975.5KiB
     new_X_test: 247.7KiB
     X_test: 243.9KiB
     y_test: 243.9KiB
     l: 124.3KiB
     final_x_train:  76.0KiB
     stop_words:   8.2KiB

但我使用的是 12Gb/12Gb (RAM) 并且会话已过期

如您所见,垃圾收集器没有做任何事情,因为显然看不到变量,但我真的需要一个解决方案来解决这个问题,谁能帮帮我吗?

【问题讨论】:

  • 将结果存储在文件中,并使用 del 关键字删除结果变量。
  • model 的大小是多少? Word2Vec 相当大(IIRC 正确 GB)。我没有在您显示的内存分配列表中看到这一点

标签: python machine-learning nlp word2vec


【解决方案1】:

通常在像 Python 这样的垃圾收集语言中,您不需要显式请求垃圾收集:当您停止保留引用(变量/传递性属性引用)时,它会自动发生) 到对象。

因此,如果您在此处遇到内存错误,几乎可以肯定是因为您确实试图一次使用超过可用内存量。

您的代码有点不完整和不清楚——max 是什么? new_X_train 是什么?你从哪里得到这些内存大小估计?等等

但值得注意的是:通常将句子表示为每个单词向量的串联。 (因此,对于 300d 词向量和最多 10 个词的句子,您就有一个 3000d 句子向量。)将词向量 平均 在一起更为常见,所以单词和句子的大小相同,短句末尾没有空白填充。

(这仍然是创建文本向量的一种非常粗略的方法,但比填充到最大句子大小更常见。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多