數據量太大,內存不夠怎么辦?


最近遇到這個問題,上網查+問同學,基本解決方法:keras,Pipeline,TFrecord,批次讀取訓練

先看第一個,keras,可能需要改網絡什么的,不太想改(先挖個坑,以后學一下keras,小白一只,勿怪)

第二個,pipeline,聽起來高大上也很專業,上網搜羅了一堆資料:
https://www.cnblogs.com/zyly/p/8982335.html
https://blog.csdn.net/chenghtao/article/details/82110434
https://www.jianshu.com/go-wild?ac=2&url=http%3A%2F%2Fwiki.jikexueyuan.com%2Fproject%2Ftensorflow-zh%2Fhow_tos%2Fthreading_and_queues.html
http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/reading_data.html
https://www.jianshu.com/p/12b52e54a63c
https://blog.csdn.net/guo1988kui/article/details/83896745
https://blog.csdn.net/west_609/article/details/78608541
(但是有點復雜,難理解,先挖個坑,以后學一下)

第三個:
TFrecord
https://blog.csdn.net/chenghtao/article/details/82110434
問題描述:利用tensorflow進行神經網絡訓練,當數據集較小或者內存足夠大時,通常的做法是將全部數據集加載到內存里,然后再將數據集分批feed給網絡進行訓練(一般配合yield使用效果更佳)。但是,當數據集大到內存不足以全部加載進來的時候,必須尋找新的加載數據的方法。
解決辦法:
可以嘗試使用tensorflow提供的隊列queue,訓練時從文件中分批讀取數據。這里選擇tensorflwo內定的標准格式TFRecord.

最后:在知乎上找到一個回答
https://zhuanlan.zhihu.com/p/35866604

解決思路其實說來也簡單,打破思維定式就好了,不是把所有圖片讀到內存中,而是只把所有圖片的路徑一次性讀到內存中。

大致的解決思路為:

將上萬張圖片的路徑一次性讀到內存中,自己實現一個分批讀取函數,在該函數中根據自己的內存情況設置讀取圖片,只把這一批圖片讀入內存中,然后交給模型,模型再對這一批圖片進行分批訓練,因為內存一般大於等於顯存,所以內存的批次大小和顯存的批次大小通常不相同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM