[英]Efficiently Create HDF5 Image Dataset for Neural Network Training with Memory Limitations
我有大的圖像數據集來訓練 CNN。 由於我無法將所有圖像加載到我的 RAM 中,我計划將它們轉儲到 HDF5 文件中(使用 h5py),然后按照建議批量迭代該集合
我嘗試為位於同一組中的每張圖片創建自己的數據集,這非常快。 但我無法想出遍歷組中的所有數據集,除了通過其名稱訪問該集。 作為替代方案,我嘗試通過擴展其形狀將所有圖像迭代地放入一個數據集中,根據
如何使用 h5py 將數據附加到 hdf5 文件中的一個特定數據集和
但這很慢。 有沒有更快的方法來創建一個 HDF5 數據集來迭代?
我意識到這是一個老問題,但我發現了一個關於這個主題的非常有用的資源,我想分享:
https://www.oreilly.com/library/view/python-and-hdf5/9781491944981/ch04.html
基本上,hdf5(啟用了塊)就像一個小文件系統。 它將數據存儲在分散在整個內存中的塊中。 因此,就像文件系統一樣,它受益於局部性。 如果塊的形狀與您嘗試訪問的數組部分的形狀相同,則讀取/寫入速度會很快。 如果您要查找的數據分散在多個塊中,則訪問速度會很慢。
因此,在對圖像訓練 NN 的情況下,您可能必須將圖像設為標准尺寸。 在創建數據集時設置chunks=(1,) + image_shape
,或者甚至更好, chunks=(batch_size,) + image_shape
,讀/寫會快很多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.