2017-06-04 10 views
0

KerasのImageDataGeneratorによって生成された画像を、そのキャプションを生成するLSTMに供給しようとしています。現在、trainフォルダには、image1.jpg, image1_caption, image2.jpg, image2_caption, ...imageN.jpg, imageN_captionの順に情報が格納されています。ケラスで生成された画像の順序

ただし、 1.画像ファイルごとに何枚の画像が生成されているかわかりません(フリップ、ズーム、回転)。 2.バッチ内のバッチとサンプルは画像1に対応しています。 shuffle = Falseと設定しても、役に立たないようです。

基本的には、に対応するバッチとサンプルを知りたいので、LSTMに入力してimageN_captionと一致させることができます。

train_datagen = ImageDataGenerator(
     rescale=1./255, 
     rotation_range=5, 
     zoom_range=0.2, 
     horizontal_flip=True) 

img_height = img_width = 224 
train_generator = train_datagen.flow_from_directory(
    './train/', 
    color_mode = "rgb", 
    target_size=(img_height, img_width), 
    batch_size=32, 
    shuffle = False, 
    class_mode=None) 

i = 0 
img_list = [] 
for batch in train_generator: #.flow(x, batch_size=1) 
    img_list.append(batch) 
    i += 1 
    if i > 5: 
     break 

答えて

0

私はこのポストを見た後に答えを見つける:https://github.com/fchollet/keras/issues/3296

基本的に画像がtrain_generator.filenamesのと同じ順序で生成されます。私は、次の画像に移動する前に、各画像がズームや回転などのシーケンスを経ると仮定しましたが、そうではありません。変換は各画像に一度に適用され、次の画像に移動します。

私は、次のコードを実行した後にこれを確認することができた:

plt.figure(figsize=(12,12)) 
for i in range(5): 
    plt.subplot(5,2,2*i+1) 
    plt.imshow(np.squeeze(img_list[0][i]), cmap='gray') 
    img=mpimg.imread('./train/'+files[i]) 
    plt.subplot(5,2,2*i+2) 
    plt.imshow(img, cmap='gray') 
plt.show() 

または第二のバッチの場合:

plt.figure(figsize=(12,12)) 
for i in range(5): 
    plt.subplot(5,2,2*i+1) 
    plt.imshow(np.squeeze(img_list[1][i]), cmap='gray') 
    img=mpimg.imread('./train/'+files[32+i]) 
    plt.subplot(5,2,2*i+2) 
    plt.imshow(img, cmap='gray') 
plt.show() 
関連する問題