python處理大訓練集過程中遇到的Memory Error問題解決

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,總之就是不要把各種需要和不需要的所有東西一次性存到內存中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章