python处理大数据集时容易出现内存错误也就是内存不够用。
1. python原始的数据类型占用空间比较大,且没有太多的选择,默认一般好像是24字节,但是实际有时候不需要这么大或这么高精度,这时候可以使用numpy中的float32, float16等,总之根据自己的需要选够用就行,这就是好几倍的内存节省。
2. python的垃圾回收机制比较懒惰,有时候在一个for循环中的变量用完不会回收,下次重新初始化的时候又重新开辟了空间,这时候可以手动del这个变量,del x,然后import gc, 然后手动gc.collect()
3. 在数据是稀疏的情况下,如训练集中大量one hot特征,此时把dense的数据转成sparse的存储方式,可以参考scipy里面的sparse模块,里面有多种支持sparse存储的数据结构可以直接调用。但是注意里面的集中数据结构至少都需要dense数据2-3倍的空间来存储,也就是说,如果你的数组中,sparse的只有一半甚至更少,那使用sparse结构只会占用更多的空间。只有在数据中大量都是稀疏的情况下才能用。
4. 本质上还是检查自己组织数据的方式是否有问题,比如是不是可以在每个batch中one hot,总之就是不要把各种需要和不需要的所有东西一次性存到内存中。