如果在多模型功能API中使用生成器,应该返回什么?

时间:2018-11-26 03:39:11

标签: python machine-learning keras generator rnn

this article之后,我正在尝试实现生成RNN。在上述文章中,训练和验证数据作为完整加载的np.array传递。但是我正在尝试使用model.fit_generator方法并提供一个生成器。

我知道,如果这是一个简单的模型,则生成器应返回:

def generator():
    ...
    yield (samples, targets)

但这是一个生成模型,这意味着涉及两个模型:

encoder_inputs = Input(shape=(None,))
x = Embedding(num_encoder_tokens, embedding_dim)(encoder_inputs)
x.set_weights([embedding_matrix])
x.trainable = False
x, state_h, state_c = LSTM(embedding_dim, return_state=True)(x)
encoder_states = [state_h, state_c]

decoder_inputs = Input(shape=(None,))
x = Embedding(num_decoder_tokens, embedding_dim)(decoder_inputs)
x.set_weights([embedding_matrix])
x.trainable = False
x = LSTM(embedding_dim, return_sequences=True)(x, initial_state=encoder_states)
decoder_outputs = Dense(num_decoder_tokens, activation='softmax')(x)

model = Model([encoder_inputs, decoder_inputs], decoder_outputs)

model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
          batch_size=batch_size,
          epochs=epochs,
          validation_split=0.2)

如前所述,我正在尝试使用生成器:

model.fit_generator(generator(),
                   steps_per_epoch=500,
                   epochs=20,
                   validation_data=generator(),
                   validation_steps=val_steps)

但是generator()应该返回什么?我有点困惑,因为有两个输入集合和一个目标。

1 个答案:

答案 0 :(得分:1)

由于模型具有两个输入和一个输出,因此生成器应返回包含两个元素的元组,其中第一个元素是包含两个数组的 list ,这两个数组对应于两个输入层,第二个元素是对应于输出层的数组:

def generator():
    ...
    yield [input_samples1, input_samples2], targets

通常,在具有M输入和N输出的模型中,生成器应返回两个列表的元组,其中第一个具有M数组,第二个具有{{ 1}}数组:

N