2017-06-14 10 views
1

Ich habe ein scheinbar einfaches Problem mit der Form der numpy Arrays von einer benutzerdefinierten Generator-Funktion, die ich innerhalb Keras fit_generator Funktion zurückgegeben.Form Problem mit Keras `fit_generator()`

Die Generatorfunktion ist ähnlich wie diese:

def data_generator(full_data, encoder): 
    for s in full_data: 
     in1_X = encoder.encode(s[:,0]) 
     in2_X = encoder.encode(s[:,1]) 
     out1_y = encoder.encode(s[:,2]) 
     out2_y = encoder.encode(s[:,3]) 
     X = [in1_X, in2_X] 
     y = [out1_y, out2_y] 
     yield (X,y) 

Ich kann die von in1_X zurück Form erhalten, indem eine for-Schleife und das Drucken der Form verwendet, die einfach (60,)

jedoch zurückkehrt, wenn dieser Aufruf mit der fit_generator() Funktion, es scheitert:

train_data_gen = data_generator(full_data, encoder) 


main_in = Input(shape=(seq_len,), name='main_input') 

# ... 
# define model 
# ... 

joint_model.fit_generator(train_data_gen, steps_per_epoch=2000, epochs=2) 

, aus dem der Ausgang dieses:

Error when checking input: 
expected main_input to have shape (None, 60) but got array with shape (60, 1) 

Wie kann ich dies nicht die numpy Array von (60,) Form ändern (60, 1) zu gestalten? Hat jemand anderes dieses Problem?

+0

Das teure Klebeband wird abgeflacht. in1_x = in1_x.flatten() usw., da Ihr Encoder ein 2D-Array zurückgibt. – Uvar

+0

Wir stehen vor dem gleichen Problem. Abflachen macht keinen Unterschied - es bietet die gleiche Form wie ohne Abflachung. Aus unserer Erfahrung rufen wir den Generator auf und werten Formen aus und erhalten die erwartete: x, y = my_generator.next() drucken ("next [x]: {}". Format (x.shape)) # shape is (517,) in unserem Fall, aber beim Füttern erhalten wir den Fehler "erwartet main_input, um Form (None, 517) zu haben, aber Array mit Form (517, 1)" – kekec

Antwort

Verwandte Themen