我有一个简单的函数来读取文件并返回一个单词列表:
def _read_words(filename):
with tf.gfile.GFile(filename, "r") as f:
words = f.read().replace("\n"," %s " % EOS).split()
print(" %d Mo" % (sys.getsizeof(words)/(1000*1000)))
return words
注意:
tf.gfile.GFile
来自TensorFlow,open
也是如此,所以你可以忽略它。EOS
是一个包含“<eos>
”当我使用1.3GB文件运行时,该过程会保留超过 20GB的RAM (请参阅htop
屏幕截图),但会为{{1}打印2353 Mo
}}
请注意,此过程只不过是:
sys.getsizeof(words)
当我逐步运行时,我会看到以下内容:
import reader
path = "./train.txt"
w = reader._read_words(path)
=&gt; 4.039 GB RAM d = file.read()
=&gt; 5.4GB RAM d = d.replace('\n', ' <eos> ')
=&gt; 22GB RAM 所以我在这里:
d = d.split()
的解决方案会很棒。 欢迎提供任何线索或建议,
THX,
保罗
解决方法:
正如我在评论中所解释的那样:
numpy
。{"word": count}
字,由出现(n为参数)n
)<eos>
或我们的内部标记\n
)加载整个数据我能做得更好: