【发布时间】:2019-02-05 07:58:03
【问题描述】:
在运行第三方脚本为深度学习模型生成特征时,我遇到了内存/交换问题。当我运行生成这些功能并将它们保存到 pkl 文件的脚本时,我得到了这个输出:
generate unigram
Headline unigram done
Killed
代码sn-p是:
print "generate unigram"
data["Headline_unigram"] = data["Headline"].map(lambda x: preprocess_data(x))
print "Headline unigram done"
data["articleBody_unigram"] = data["articleBody"].map(lambda x: preprocess_data(x))
print "Body unigram done"
print "generate bigram"
join_str = "_"
data["Headline_bigram"] = data["Headline_unigram"].map(lambda x: ngram.getBigram(x, join_str))
print "Headline bigram done"
data["articleBody_bigram"] = data["articleBody_unigram"].map(lambda x: ngram.getBigram(x, join_str))
print "Body bigram done"
print "generate trigram"
join_str = "_"
data["Headline_trigram"] = data["Headline_unigram"].map(lambda x: ngram.getTrigram(x, join_str))
print "Headline trigram done"
data["articleBody_trigram"] = data["articleBody_unigram"].map(lambda x: ngram.getTrigram(x, join_str))
print "Body trigram done"
with open(cwd+'data.pkl', 'wb') as outfile:
cPickle.dump(data, outfile, -1)
print 'dataframe saved in data.pkl'
它几乎可以为 pandas 数据框中的两列生成一元/二元/三元。 data 对象很大,包含 900k 个条目,这就是我遇到 RAM/交换问题的原因。我的问题是,在每一行之后保存到泡菜文件(又名转储)并释放该行使用的内存的正确方法是什么。例如:
做完之后
data["Headline_unigram"] = data["Headline"].map(lambda x: preprocess_data(x))
如何将其保存到 .pkl 文件并释放 data["Headline"] 正在使用的内存而不丢失其内容?由于这是第三方代码,所以修改完全不应该改变data.pkl的结构
谢谢, 卢卡斯。
【问题讨论】:
-
一条评论,与您的问题没有直接关系:您可以将
data["Headline_unigram"] = data["Headline"].map(lambda x: preprocess_data(x))简化为data["Headline_unigram"] = data["Headline"].map(preprocess_data) -
这仍然适用于 2.7?此修改是否有任何内存增益?
-
对于 2.7 也是如此。不节省任何内存,只是简化您的代码。
标签: python python-2.7 pickle