seq2seq 模型 train 和 inference 的 decoder 不同,参数是如何生效的
Created by: AoZhang
paddle models 中的 seq2seq 模型,decoder 部分有个分支判断是 train 还是 inference(beam_search),PaddleNLP/PaddleTextGEN/seq2seq/base_model.py 贴一下代码:
dec_cell = xxx
output_layers = yyy
if mode == 'train':
dec_output, dec_final_state = rnn(cell=dec_cell,
inputs=self.tar_emb,
initial_states=enc_final_state)
dec_output = output_layer(dec_output)
return dec_output
elif mode == 'beam_search':
beam_search_decoder = BeamSearchDecoder(
dec_cell,
self.beam_start_token,
self.beam_end_token,
beam_size,
embedding_fn=self.tar_embeder,
output_fn=output_layer)
outputs, _ = dynamic_decode(
beam_search_decoder,
inits=enc_final_state,
max_step_num=self.beam_max_step_num)
return outputs
decode 的核心是 dec_cell
和 output_layer
,这两个是在 if/else 前定义的,所以
- inference 阶段按
name
就能找到 train 好的参数了吗? - train 中的
rnn()
和 inference 阶段的BeamSearchDecoder()
,dynamic_decode()
都只是控制流,不包含参数?