как использовать tfa.seq2seq.dynamic_decode в тензорном потоке 2.0 на момент вывода - PullRequest
0 голосов
/ 19 октября 2019

В тензорном потоке 2.0 входные тензоры необходимо вводить во время вызова, а не во время построения. Я пытаюсь использовать динамический_код для задачи 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. не может найти начальный тензор

     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'
...