2016-11-08 52 views
0

我準備在凱拉斯學習相當大的神經網絡(fc,conv,pool等)和數以百萬計的小圖片(~~ 100x100像素,每個3個通道)。所有文件將在~~ 800 GB左右,這是我的問題。我應該如何準備數據?如何管理大型神經網絡的數據批次?

我知道Keras可以批量處理,但是學習網絡時最好使用每個8 GB的文件或創建〜300k文件(在每個合併的32或64圖像中)?我認爲擁有更大的文件會更好,讀取8次(8個大文件)的速度比30萬次更快,但我不確定。

我有小於100 GB的內存,所以我不能一次加載整個數據。

謝謝!

回答

0

您可以使用Keras提供的keras.preprocessing.image.ImageDataGenerator而不是將所有文件加載到內存中。它允許你設置批量大小。如果需要,ImageDataGenerator還可以幫助您實時「免費」增加數據。由於使用一批圖像訓練網絡需要時間,因此從硬盤讀取文件不會降低性能。主要的瓶頸是計算能力。

接口和keras.preprocessing.image.ImageDataGenerator例子可以在ImageDataGenerator

0

發現如果由於某種原因,你不能使用keras.preprocessing.image.ImageDataGenerator,您可以使用自己的發電機。

在我的情況下,我做了分割,並且不支持它們的flow_from_directory方法。所以我寫了我自己的發生器,根據https://wiki.python.org/moin/Generators,無限期地產生圖像。您可以使用model.fit_generator方法:https://keras.io/models/model/#fit_generator