2017-06-15 96 views
0

我對使用大數據的ML非常陌生,以前我曾經在Keras通用卷積實例中爲狗/貓分類玩過,但是當我應用類似的方法處理我的圖像集時,我遇到內存問題。使用Keras卷積網絡的內存問題

我的數據集由非常長的10048 x1687像素大小的圖像組成。爲了避免內存問題,我使用1的批量大小,一次將一張圖像送入模型。

該模型有兩個卷積層,每個卷積層都跟隨最大池,在完全連接層之前一起使平坦層大致290,000個輸入。

運行後立即,但內存使用扼流圈在其極限(8Gb)。

所以我的問題有以下幾點:

1)什麼是處理在Python在本地(無雲的利用率)這樣的尺寸計算的最佳方法?是否有額外的Python庫,我需要利用?

+0

如果您使用TensorFlow作爲後端,您將能夠在多個GPU上拆分網絡。 – Mathias

回答

1

看看yield在Python和發電機的想法。您不需要在開始時加載所有數據。你應該讓你的batch_size就足夠小,你不會得到內存錯誤。 你發生器可以是這樣的:

def generator(fileobj, labels, memory_one_pic=1024, batch_size): 
    start = 0 
    end = start + batch_size 
    while True: 
    X_batch = fileobj.read(memory_one_pic*batch_size) 
    y_batch = labels[start:end] 
    start += batch_size 
    end += batch_size 
    if not X_batch: 
     break 
    if start >= amount_of_datasets: 
     start = 0 
     end = batch_size 
    yield (X_batch, y_batch) 

...以後當你已經擁有你的架構準備......

train_generator = generator(open('traindata.csv','rb'), labels, batch_size) 
train_steps = amount_of_datasets//batch_size + 1 

model.fit_generator(generator=train_generator, 
        steps_per_epoch=train_steps, 
        epochs=epochs) 

你也應該閱讀有關batch_normalization,基本上有助於更快了解精度更高。

0

在使用train_generator()時,還應該設置max_q_size參數。默認情況下它設置爲10,這意味着您只需要使用1個批次就可以加載10個批處理文件(因爲train_generator()被設計爲流式傳輸來自外部源的數據,可以像網絡一樣延遲,而不是節省內存)。我建議爲你的目的設置max_q_size=1