2017-06-14 68 views
1

从我使用keras的fit_generator函数中的自定义生成函数返回。与keras`fit_generator()外形问题`我有与numpy的阵列的形状,一个看似简单的问题

发电机功能类似于此:

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) 

我可以通过使用for循环和打印的形状,这只是返回(60,)

然而,在调用这个时候得到in1_X返回的形状使用fit_generator()功能,它失败:

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) 

从其中输出是这样的:

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

我怎样才能得到这个不改变形状(60,) numpy阵列形状(60, 1)?其他人遇到过这个问题吗?

+0

昂贵的管道胶带是变平。 in1_x = in1_x.flatten()等等,因为你的编码器似乎返回一个二维数组。 – Uvar

+0

我们正面临同样的问题。扁平化并没有什么区别 - 它提供了与未扁平化相同的形状。根据我们的经验,我们调用发电机和评估形状,并收到预期的一个:X,Y = my_generator.next() 打印( “下一个[X]:{}”。格式(x.shape))#形状(517,)在我们的例子中,但是当喂食时,我们得到错误“期望的main_input有形状(无,517),但有形状的数组(517,1)” – kekec

回答