在暹罗网络中使用fit_generator时出错

时间:2018-12-30 14:09:28

标签: python tensorflow machine-learning keras generator

我正在尝试改编Keras MNIST Siamese example以使用生成器。

example上,我们有:

model.fit([tr_pairs[:, 0], tr_pairs[:, 1]], tr_y,
          batch_size=128,
          epochs=epochs,
          validation_data=([te_pairs[:, 0], te_pairs[:, 1]], te_y))

试图弄清楚生成器需要返回的形状,我做到了:

np.array([tr_pairs[:, 0], tr_pairs[:, 1]]).shape

并获得

(2, 108400, 28, 28)

然后我的生成器返回此:

(data, labels) = my_generator
data.shape
(2, 6, 300, 300, 3)
labels.shape
(6,)

因此,它是两个数组(用于NN输入),具有6个图像(batch_size),大小为300x300x3(RGB)。

下面是fit_generator()的用法:

...
input_shape = (300, 300, 3)
...
model.fit_generator(kbg.generate(set='train'), 
                    steps_per_epoch=training_steps,
                    epochs=1,
                    verbose=1,
                    callbacks=[],
                    validation_data=kbg.generate(set='test'),
                    validation_steps=validation_steps,
                    use_multiprocessing=False,
                    workers=0)  

我想我正在以相同的形状喂入NN,但是出现以下错误:

ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead gotthe following list of 1 arrays: [array([[[[[0.49803922, 0.48235294, 0.55686275],
          [0.63137255, 0.61176471, 0.64313725],
          [0.8627451 , 0.84313725, 0.84313725],
          ...,
          [0.58823529, 0.64705882, 0.631...

怎么了?

1 个答案:

答案 0 :(得分:1)

由于模型具有两个输入层,因此生成器应产生两个数组的列表作为对应于两个输入层的输入样本,如下所示:

def my_generator(args):
    # ...
    yield [first_pair, second_pair], labels

其中first_pairsecond_pair的形状均为(n_samples, 300, 300, 3)