【问题标题】:how to use tfa.seq2seq.dynamic_decode in tensorflow 2.0 at the time of inference推理时如何在tensorflow 2.0中使用tfa.seq2seq.dynamic_decode
【发布时间】:2023-04-05 08:13:01
【问题描述】:

在 tensorflow 2.0 中,输入张量需要在调用时馈送,而不是在构造时馈送。我正在尝试将 dynamic_decode 用于 seq2seq 任务。我如何使用 dynamic_decode 并通过 1 行代码获取输出,而不是手动处理 initialize() 然后 step() 时间步长。在 tf 1.14 中,您可以将 initial_state 张量传递给构造函数。

greedy_sampler = tfa.seq2seq.GreedyEmbeddingSampler()

decoder_input = tf.expand_dims([Y_tokenizer.word_index['<start>']]* inference_batch_size,1)
decoder_emb_inp = decoderNetwork.decoder_embedding(decoder_input)

decoder_instance = tfa.seq2seq.BasicDecoder(decoderNetwork.decoder_rnncell, greedy_sampler)

#initialize inference decoder

(first_finished, first_inputs,first_state) = decoder_instance.initialize(decoder_embedding_matrix,
                             start_tokens = start_tokens, end_token=end_token, initial_state = s_prev)


final_outputs, final_state, final_sequence_lengths = tfa.seq2seq.dynamic_decode(decoder_instance,
                                                                                maximum_iterations=maximum_iterations,
                                                                                )

当我尝试使用 dynamic_decode 时出现以下错误。它找不到 initial_state 张量

     52 final_outputs, final_state, final_sequence_lengths = tfa.seq2seq.dynamic_decode(decoder_instance,
---> 53                                                                                 maximum_iterations=maximum_iterations,
     54                                                                                 )
     55 

1 frames

/usr/local/lib/python3.6/dist-packages/tensorflow_addons/seq2seq/decoder.py in dynamic_decode(decoder, output_time_major, impute_finished, maximum_iterations, parallel_iterations, swap_memory, training, scope, **kwargs)
    333             decoder_init_kwargs = kwargs.pop("decoder_init_kwargs", {})
    334             initial_finished, initial_inputs, initial_state = \
--> 335                 decoder.initialize(decoder_init_input, **decoder_init_kwargs)
    336 
    337         zero_outputs = tf.nest.map_structure(

/usr/local/lib/python3.6/dist-packages/tensorflow_addons/seq2seq/basic_decoder.py in initialize(self, inputs, initial_state, **kwargs)
     69         # Assume the dtype of the cell is the output_size structure
     70         # containing the input_state's first component's dtype.
---> 71         self._cell_dtype = tf.nest.flatten(initial_state)[0].dtype
     72         return self.sampler.initialize(inputs, **kwargs) + (initial_state,)
     73 

AttributeError: 'NoneType' object has no attribute 'dtype'

【问题讨论】:

    标签: tensorflow2.0 seq2seq


    【解决方案1】:

    我也遇到了同样的错误。 就我而言,

    final_outputs, final_state, final_sequence_lengths = tfa.seq2seq.dynamic_decode(
      decoder_instance,
      maximum_iterations=maximum_iterations,
      decoder_init_input=some_inputs,
      decoder_init_kwargs={"initial_state": some_initial_state)
    

    可以避免错误。 这似乎是由this line 引起的。

    【讨论】:

      【解决方案2】:

      tfa.seq2seq.dynamic_decode() 内部调用 BasicDecoder 上的 initialize(),这需要 input 和 initial_state。 因此,您需要将 'decoder_init_input' 和 'decoder_init_kwargs' 参数传递给 dynamic_decode()

      tfa.seq2seq.dynamic_decode(decoder = decoder,
                                  maximum_iterations = self.max_output_sequence_length,
                                  swap_memory = True,
                                  scope = decoder_scope,
                                  decoder_init_input= decoder_embeddings_matrix,
                                  decoder_init_kwargs= {
                                      'initial_state' : decoder_initial_state,
                                      'start_tokens': start_tokens, 'end_token': end_token
                                  })
      
      
      
      
      

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 2019-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 1970-01-01
        相关资源
        最近更新 更多