Проблема с вводом в tf.keras.layers.GRU - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь создать модель seq2seq, используя tfa.seq2seq.BaseDecoder в TensorFlow 2.1. У меня есть

tf.keras.layers.GRU(64)(inputs, [states])

, где входы имеют форму (batch_size, 1, embedding_dimension) и происходят из

inputs = tf.keras.layers.Embedding(1000, 64, mask_zero=True)(tf.fill([batch_size, 1], value=1))

, а states - скрытые состояния кодировщика для пакета.

I я реализую tfa.seq2seq.BaseDecoder s initialize, step и некоторые свойства, и ошибка возникает в step, который содержит строку, которую я скопировал здесь.

Однако это дает мне следующее сообщение об ошибке (некоторые имена функций изменены, чтобы упростить объяснение вопроса, и немного отличаются в коде).

    Traceback (most recent call last):
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 2659, in _set_inputs
    outputs = self(inputs, **kwargs)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 773, in __call__
    outputs = call_fn(cast_inputs, *args, **kwargs)
  File "/home/.local/lib/python3.7/site-packages/tensorflow_core/python/autograph/impl/api.py", line 237, in wrapper
    raise e.ag_error_metadata.to_exception(e)
TypeError: in converted code:

    /home/lemmatizer_noattn.py:155 call  *
        output_layer, _, output_lens, _ = self.DecoderTraining((source_states, target_charseqs), True)
    /home/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py:785 __call__
        str(e) + '\n"""')

    TypeError: You are attempting to use Python control flow in a layer that was not declared to be dynamic. Pass `dynamic=True` to the class constructor.
    Encountered error:
    """
    in converted code:

        /home/.local/lib/python3.7/site-packages/tensorflow_addons/seq2seq/decoder.py:162 call  *
            return dynamic_decode(
        /home/.local/lib/python3.7/site-packages/tensorflow_addons/seq2seq/decoder.py:405 body  *
            (next_outputs, decoder_state, next_inputs, decoder_finished) = decoder.step(
        /home/.local/lib/python3.7/site-packages/tensorflow_core/python/ops/control_flow_ops.py:2478 while_loop_v2
            return_same_structure=True)
        /home/lemmatizer_noattn.py:79 step  *
            outputs, [states] = self.lemmatizer.target_rnn_cell(inputs, [states])
        /home/.local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:539 __iter__
            self._disallow_iteration()
        /home/.local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:535 _disallow_iteration
            self._disallow_in_graph_mode("iterating over `tf.Tensor`")
        /home/.local/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:515 _disallow_in_graph_mode
            " this function with @tf.function.".format(task))

        OperatorNotAllowedInGraphError: iterating over `tf.Tensor` is not allowed in Graph execution. Use Eager execution or decorate this function with @tf.function.

    """

Мне не удалось выяснить из документации, откуда могла возникнуть ошибка ни советов по инте rnet не нашел. Есть идеи, где может быть проблема?

1 Ответ

0 голосов
/ 07 мая 2020

Эта строка выглядит как расширение кортежа и списка, автограф которого не расширяется (что приводит к этой запутанной ошибке):

/home/lemmatizer_noattn.py:79 step  *
            outputs, [states] = self.lemmatizer.target_rnn_cell(inputs, [states])

Что возвращает self.lemmatizer.target_rnn_cell? Попробуйте распечатать значение перед его расширением, например:

retval = self.lemmatizer.target_rnn_cell(inputs, [states])
print(retval)
inputs = retval[0]
states = retval[1][0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...