在seq-to-seq模型中以推理模式训练
Training in inference mode in seq-to-seq model
这显然是我编写的带有嵌入的 seq2seq 模型的代码
encoder_inputs = Input(shape=(MAX_LEN, ), dtype='int32',)
encoder_embedding = embed_layer(encoder_inputs)
encoder_LSTM = LSTM(HIDDEN_DIM, return_state=True)
encoder_outputs, state_h, state_c = encoder_LSTM(encoder_embedding)
encoder_states = [state_h, state_c]
decoder_inputs = Input(shape=(MAX_LEN, ))
decoder_embedding = embed_layer(decoder_inputs)
decoder_LSTM = LSTM(HIDDEN_DIM, return_state=True, return_sequences=True)
decoder_outputs, _, _ = decoder_LSTM(
decoder_embedding, initial_state=encoder_states)
outputs = TimeDistributed(
Dense(VOCAB_SIZE, activation='softmax'))(decoder_outputs)
model = Model([encoder_inputs, decoder_inputs], outputs)
# defining inference model
encoder_model = Model(encoder_inputs, encoder_states)
decoder_state_input_h = Input(shape=(None,))
decoder_state_input_c = Input(shape=(None,))
decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
decoder_outputs, state_h, state_c = decoder_LSTM(
decoder_embedding, initial_state=decoder_states_inputs)
decoder_states = [state_h, state_c]
outputs = TimeDistributed(
Dense(VOCAB_SIZE, activation='softmax'))(decoder_outputs)
decoder_model = Model(
[decoder_inputs] + decoder_states_inputs, [outputs] + decoder_states)
return model, encoder_model, decoder_model
我们正在使用推理模式进行预测,尤其是编码器和解码器模型,但我不确定编码器和解码器的训练在哪里进行?
编辑 1
代码基于:https://keras.io/examples/lstm_seq2seq/,
添加了嵌入层和时间分布密集层。
有关问题的更多信息:github repo
同时训练编码器和解码器,或者更准确地说,训练由这两者组成的模型,然后训练它们(这不是 GAN,你需要一些花哨的训练周期)
如果您仔细查看所提供的 link,有一个部分是训练模型的。
# Run training
model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
batch_size=batch_size,
epochs=epochs,
validation_split=0.2)
编辑:来自评论
如果仔细观察,您在拟合后定义的 "new" 模型包含在上一步中已经训练过的层。即 Model(encoder_inputs, encoder_states) encoder_inputs 和 encoder_states 在初始训练期间都被使用,你只是重新包装它们。
这显然是我编写的带有嵌入的 seq2seq 模型的代码
encoder_inputs = Input(shape=(MAX_LEN, ), dtype='int32',)
encoder_embedding = embed_layer(encoder_inputs)
encoder_LSTM = LSTM(HIDDEN_DIM, return_state=True)
encoder_outputs, state_h, state_c = encoder_LSTM(encoder_embedding)
encoder_states = [state_h, state_c]
decoder_inputs = Input(shape=(MAX_LEN, ))
decoder_embedding = embed_layer(decoder_inputs)
decoder_LSTM = LSTM(HIDDEN_DIM, return_state=True, return_sequences=True)
decoder_outputs, _, _ = decoder_LSTM(
decoder_embedding, initial_state=encoder_states)
outputs = TimeDistributed(
Dense(VOCAB_SIZE, activation='softmax'))(decoder_outputs)
model = Model([encoder_inputs, decoder_inputs], outputs)
# defining inference model
encoder_model = Model(encoder_inputs, encoder_states)
decoder_state_input_h = Input(shape=(None,))
decoder_state_input_c = Input(shape=(None,))
decoder_states_inputs = [decoder_state_input_h, decoder_state_input_c]
decoder_outputs, state_h, state_c = decoder_LSTM(
decoder_embedding, initial_state=decoder_states_inputs)
decoder_states = [state_h, state_c]
outputs = TimeDistributed(
Dense(VOCAB_SIZE, activation='softmax'))(decoder_outputs)
decoder_model = Model(
[decoder_inputs] + decoder_states_inputs, [outputs] + decoder_states)
return model, encoder_model, decoder_model
我们正在使用推理模式进行预测,尤其是编码器和解码器模型,但我不确定编码器和解码器的训练在哪里进行?
编辑 1
代码基于:https://keras.io/examples/lstm_seq2seq/,
添加了嵌入层和时间分布密集层。
有关问题的更多信息:github repo
同时训练编码器和解码器,或者更准确地说,训练由这两者组成的模型,然后训练它们(这不是 GAN,你需要一些花哨的训练周期)
如果您仔细查看所提供的 link,有一个部分是训练模型的。
# Run training
model.compile(optimizer='rmsprop', loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
batch_size=batch_size,
epochs=epochs,
validation_split=0.2)
编辑:来自评论
如果仔细观察,您在拟合后定义的 "new" 模型包含在上一步中已经训练过的层。即 Model(encoder_inputs, encoder_states) encoder_inputs 和 encoder_states 在初始训练期间都被使用,你只是重新包装它们。