谷歌与python合作:垃圾收集器不工作?
我正在使用python开发google collab,我有一个12Gb的Ram。 我正在尝试使用谷歌预先训练过的word2vec来用向量表示句子。 我应该有相同的长度向量,即使它们没有相同的字数,所以我使用了填充(这里句子的最大长度是我的变量max) 问题是,每次我想创建一个包含所有向量的矩阵时,我的RAM内存都会很快用完(在20k th/128k vector上) 这是我的代码:谷歌与python合作:垃圾收集器不工作?,python,machine-learning,nlp,word2vec,Python,Machine Learning,Nlp,Word2vec,我正在使用python开发google collab,我有一个12Gb的Ram。 我正在尝试使用谷歌预先训练过的word2vec来用向量表示句子。 我应该有相同的长度向量,即使它们没有相同的字数,所以我使用了填充(这里句子的最大长度是我的变量max) 问题是,每次我想创建一个包含所有向量的矩阵时,我的RAM内存都会很快用完(在20k th/128k vector上) 这是我的代码: final_x_train = [] l=np.zeros((max,300)) # The legnth of
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,会话已过期
正如您所看到的,垃圾回收器没有做任何事情,因为表面上看不到变量,但我确实需要一个解决方案来解决这个问题。有人能帮我吗?通常在像Python这样的垃圾回收语言中,您不需要显式地请求垃圾回收:它会自动发生当您停止保留对对象的引用(变量/可传递属性引用)时 因此,如果您在这里遇到内存错误,几乎可以肯定,这是因为您确实试图一次使用超过可用内存量的内存 您的代码有点不完整和不清楚–什么是
max
?什么是新的列车?你从哪里得到这些内存大小估计?等等
但值得注意的是:将一个句子表示为每个单词向量的串联不是典型的。(因此,对于300d单词向量和最多10个单词的句子,就有了3000d的句子向量。)更常见的是将单词向量平均在一起,因此单词和句子的大小都相同,并且在短句末尾没有空格填充
(这仍然是一种非常粗糙的创建文本向量的方法,但比填充到最大句子大小更为常见。)一般来说,在像Python这样的垃圾收集语言中,您不需要显式地请求垃圾收集:当您停止保留引用时,垃圾收集会自动发生(变量/可传递属性引用)到对象 因此,如果您在这里遇到内存错误,几乎可以肯定,这是因为您确实试图一次使用超过可用内存量的内存 您的代码有点不完整和不清楚-什么是
max
?什么是new\u X\u train
?您从哪里得到这些内存大小估计?等等
但值得注意的是:将一个句子表示为每个单词向量的串联不是典型的更常见的是将单词向量平均在一起,因此单词和句子的大小都相同,并且短句末尾没有空白填充
(这仍然是创建文本向量的一种非常粗糙的方法,但比填充到最大句子大小更常见。)将结果存储在文件中,并使用del关键字删除结果变量。
模型的大小是多少?
?Word2Vec相当大(IIRC-GBs)。我看不到您正在显示的内存分配列表将结果存储在文件中,并使用del关键字删除结果变量。model
的大小是多少?Word2Vec相当大(IIRC正确地说是GBs)。我看不到您正在显示的内存分配列表