2017-02-16 84 views
1

我在Keras中使用ImageDataGenerator來讀取圖像的目錄。我想將結果保存在一個numpy數組中,這樣我可以進一步操作並將其保存到磁盤中的一個文件中。將ImageDataGenerator結果指定給Numpy數組

flow_from_directory()返回迭代器,這就是爲什麼我嘗試以下

itr = gen.flow_from_directory('data/train/', batch_size=1, target_size=(32,32)) 
imgs = np.concatenate([itr.next() for i in range(itr.nb_sample)]) 

但生產

ValueError: could not broadcast input array from shape (32,32,3) into shape (1) 

我認爲我濫用concatenate()功能,但我想不出我失敗的地方。

+0

我部分地通過添加解決了問題一個'[0]''後面itr.next()'。然而,這隻能給我x數據,我必須再次用'[1]'做y數據。然後我不能合併兩個給定的'(A,B,C,D)'和'(A,E)'來塑造'(A,B,C,D,E)'。 – pietz

回答

2

我有同樣的問題,並以下列方式解決它: itr.next將下一批圖像作爲兩個numpy.ndarray對象返回:batch_x,batch_y。 (來源:keras/preprocessing/image.py) 所以你可以做的是將flow_from_directory的batch_size設置爲整個火車數據集的大小。

實施例,我的整個訓練集包括1481個的圖像:

train_datagen = ImageDataGenerator(rescale=1./255) 
itr = train_generator = train_datagen.flow_from_directory(
train_data_dir, 
target_size=(img_width, img_height), 
batch_size=1481, 
class_mode='categorical') 

X, y = itr.next()