2017-09-20 1 views
1

Ich versuche ein Siamesisches Netzwerk in Keras zu implementieren und ich möchte Bildtransformationen auf die 2 Eingangsbilder mit Keras Image Data Generators anwenden. Gemäß dem Beispiel in der Docs- https://keras.io/preprocessing/image/, habe ich versucht, es wie this-Wie kombiniere ich zwei Keras Generator Funktionen

datagen_args = dict(rotation_range=10, 
        width_shift_range=0.1, 
        height_shift_range=0.1, 
        horizontal_flip=True) 

in_gen1 = ImageDataGenerator(**datagen_args) 
in_gen2 = ImageDataGenerator(**datagen_args) 

train_generator = zip(in_gen1, in_gen2) 

model.fit(train_generator.flow([pair_df[:, 0,::],pair_df[:, 1,::]], 
          y_train,batch_size=16), epochs, verbose = 1) 

Aber dieser Code diesen Fehler führt zu implementieren:

Typeerror: zip Argument # 1 muss unterstützen Iteration

Ich habe versucht, itertools.izip wie in Keras - Generator for large dataset of Images and Masks vorgeschlagen, aber das wirft den gleichen Fehler.

Wie kann ich das beheben?

EDIT: Falls jemand interessiert ist, arbeitete diese finally-

datagen_args = dict(
    featurewise_center=False, 
    rotation_range=10, 
    width_shift_range=0.1, 
    height_shift_range=0.1, 
    horizontal_flip=True) 

in_gen1 = ImageDataGenerator(**datagen_args) 
in_gen2 = ImageDataGenerator(**datagen_args) 

in_gen1 = in_gen1.flow(pair_df[:, 0,::], y_train, batch_size = 16, shuffle = False) 
in_gen2 = in_gen2.flow(pair_df[:, 1,::], y_train, batch_size = 16, shuffle = False) 

for e in range(epochs): 
    batches = 0 
    for x1, x2 in itertools.izip(in_gen1,in_gen2): 
    # x1, x2 are tuples returned by the generator, check whether targets match 
     assert sum(x1[1] != x2[1]) == 0 
     model.fit([x1[0], x2[0]], x1[1], verbose = 1) 
     batches +=1 
     if(batches >= len(pair_df)/16): 
      break 

Antwort

1

Sie müssen sie zuerst etwas umwandeln iterable die Flow-Methode.

Versuchen Sie Folgendes:

datagen_args = dict(rotation_range=10, 
        width_shift_range=0.1, 
        height_shift_range=0.1, 
        horizontal_flip=True) 

in_gen1 = ImageDataGenerator(**datagen_args) 
in_gen2 = ImageDataGenerator(**datagen_args) 

gen1_flow = in_gen1.flow(X_train[:,0, ::],y_train, batch_size=16) 
gen2_flow = in_gen2.flow(X_train[:,1, ::],y_train, batch_size=16) 

train_generator = zip(gen1_flow, gen2_flow) 

model.fit_generator(train_generator, 
        steps_per_epoch=len(X_train)/16, 
        epochs=epochs) 
+0

Dank! Das hat funktioniert. – azure31

Verwandte Themen