数据量太大,内存不够怎么办?
最近遇到這個(gè)問(wèn)題,上網(wǎng)查+問(wèn)同學(xué),基本解決方法:keras,Pipeline,TFrecord,批次讀取訓(xùn)練
先看第一個(gè),keras,可能需要改網(wǎng)絡(luò)什么的,不太想改(先挖個(gè)坑,以后學(xué)一下keras,小白一只,勿怪)
第二個(gè),pipeline,聽(tīng)起來(lái)高大上也很專(zhuān)業(yè),上網(wǎng)搜羅了一堆資料:
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
(但是有點(diǎn)復(fù)雜,難理解,先挖個(gè)坑,以后學(xué)一下)
第三個(gè):
TFrecord
https://blog.csdn.net/chenghtao/article/details/82110434
問(wèn)題描述:利用tensorflow進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練,當(dāng)數(shù)據(jù)集較小或者內(nèi)存足夠大時(shí),通常的做法是將全部數(shù)據(jù)集加載到內(nèi)存里,然后再將數(shù)據(jù)集分批feed給網(wǎng)絡(luò)進(jìn)行訓(xùn)練(一般配合yield使用效果更佳)。但是,當(dāng)數(shù)據(jù)集大到內(nèi)存不足以全部加載進(jìn)來(lái)的時(shí)候,必須尋找新的加載數(shù)據(jù)的方法。
解決辦法:
可以嘗試使用tensorflow提供的隊(duì)列queue,訓(xùn)練時(shí)從文件中分批讀取數(shù)據(jù)。這里選擇tensorflwo內(nèi)定的標(biāo)準(zhǔn)格式TFRecord.
最后:在知乎上找到一個(gè)回答
https://zhuanlan.zhihu.com/p/35866604
解決思路其實(shí)說(shuō)來(lái)也簡(jiǎn)單,打破思維定式就好了,不是把所有圖片讀到內(nèi)存中,而是只把所有圖片的路徑一次性讀到內(nèi)存中。
大致的解決思路為:
將上萬(wàn)張圖片的路徑一次性讀到內(nèi)存中,自己實(shí)現(xiàn)一個(gè)分批讀取函數(shù),在該函數(shù)中根據(jù)自己的內(nèi)存情況設(shè)置讀取圖片,只把這一批圖片讀入內(nèi)存中,然后交給模型,模型再對(duì)這一批圖片進(jìn)行分批訓(xùn)練,因?yàn)閮?nèi)存一般大于等于顯存,所以?xún)?nèi)存的批次大小和顯存的批次大小通常不相同。
總結(jié)
以上是生活随笔為你收集整理的数据量太大,内存不够怎么办?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LNSYOJ201小胖的奇偶【并查集+离
- 下一篇: 【high-speed-download