Как разбить oop внутри изготовленной на заказ модели Tensorflow (используя Keras) - PullRequest
1 голос
/ 22 апреля 2020

Я создаю приложение машинного обучения в Tensorflow 2.0.
Я пытаюсь оптимизировать вычислительную эффективность, ломая for-l oop (если выполняется условие) при переборе фактов внутри функции вызова, но он возвращает сообщение об ошибке:

OperatorNotAllowedInGraphError: использование tf.Tensor в качестве Python bool недопустимо: AutoGraph не преобразовал эту функцию. Попробуйте декорировать его напрямую с помощью u / tf.function.
(я также пытался добавить функцию tf методом вызова

Кто-нибудь знает, как разбить for-l oop внутри вызвать функцию в пользовательской модели тензорного потока и сделать лог c?

мой код
def call(self, inputs, questions):
    episode = tf.zeros(shape=(self.batch_size, self.units))
    memory = questions
    facts = self.split(self.transpose(self.cast(inputs, tf.float32), perm?(1,0,2)), self.facts_len)

    for _ in range(self.passes):
        for c in facts:
            c = tf.squeeze(c)
            g = self.attention(c, memory, questions)

            episode = (
                g * self.rnn(tf.expand_dims(c,-1), memory)[1] + (1-g) * episode
            )

        # Generates next memory
        _, memory = self.rnn(self.expand(episode, -1), memory)
    return memory

1 Ответ

0 голосов
/ 30 апреля 2020

Вы должны иметь возможность использовать break внутри своей логики c. Keras применяет автограф к call, поэтому он должен работать, но я предполагаю, что вам нужно изменить внешнее l oop: for _ in tf.range(self.passes), и если разрыв находится внутри внутреннего l oop, убедитесь, что facts также является тензорным.

См. этот гид и справочник focs для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...