2017-01-18 28 views
7

flow_from_directory kullanarak yüklenen dosya adlarını almak mümkün mü? Ben:Keras flowFromDirectory dosya isimlerini yaratıldıkça alın

datagen = ImageDataGenerator(
    rotation_range=3, 
#  featurewise_std_normalization=True, 
    fill_mode='nearest', 
    width_shift_range=0.2, 
    height_shift_range=0.2, 
    horizontal_flip=True 
) 

train_generator = datagen.flow_from_directory(
     path+'/train', 
     target_size=(224, 224), 
     batch_size=batch_size,) 

ben gibi benim çok çıkışlı modeli için özel bir jeneratör var: Şu anda ben a için ama gerçek eğitim için rasgele sayılar üreten am

a = np.arange(8).reshape(2, 4) 
# print(a) 

print(train_generator.filenames) 

def generate(): 
    while 1: 
     x,y = train_generator.next() 
     yield [x] ,[a,y] 

Düğüm, ben istiyorum Resimlerimin sınırlayıcı kutu koordinatlarını içeren bir json dosyasını yükleyin. Bunun için train_generator.next() yöntemini kullanarak oluşturulan dosya adlarını almam gerekecek. Bunu aldıktan sonra dosyayı yükleyebilirim, json'u ayrıştırıp a yerine geçirebilirim. Ayrıca, x değişkeninin ve aldığım dosya adlarının listesinin sıralamasının da aynı olması gerekir.

+0

Yalnızca varsayılan Keras'ı kullanmak - mümkün değil. Ancak bunu yapmak için Keras kodunu değiştirebilirsiniz. –

+0

Cevabımı okudun mu? –

cevap

12

Evet, en azından 2.0.4 sürümüyle (önceki sürüm hakkında bilmiyorum) mümkün.

ImageDataGenerator().flow_from_directory(...) örneği, batch_index numaralı öznitelik ve batch_index öznitelik sırasındaki tüm dosyaların bir listesi olan filenames özniteliğine sahiptir.

datagen = ImageDataGenerator() 
gen = datagen.flow_from_directory(...) 

Ve jeneratör her yineleme böyle karşılık gelen dosya alabilirsiniz:: Yani böyle yapabilirsin Bu akım toplu size görüntülerin dosya adlarını verecek

for i in gen: 
    idx = (gen.batch_index - 1) * gen.batch_size 
    print(gen.filenames[idx : idx + gen.batch_size]) 

.

+4

Dikkat edilmelidir ki, karışık çalma True (varsayılan) ise bu çalışmaz. Her zaman dosya isimlerini, ilk olarak işlendikleri sıraya göre, nüksetmeden, jeneratörden döndükleri sırayla alacaksınız. –

+0

@AlexGuth 'shuffle = True' kullanırken ne yapılmalı? –