Глубокое обучение с кодом Python больше не работает. "TypeError: Операции вне кода построения функции передается тензор" Graph "." - PullRequest
0 голосов
/ 05 августа 2020

Я реализую вариационный автоэнкодер Tensorflow, копируя код в точности из книги «Глубокое обучение с Python». Вплоть до go код работал отлично, но со вчерашнего дня он перестал работать (я не менял код).

Код предназначен для генеративной модели, которая может копировать изображения из набор данных MNIST.

Специфическое c сообщение об ошибке приведено ниже:

TypeError: Операция вне кода построения функции передает тензор «График». Возможна утечка тензоров Graph из контекста построения функции, если включить tf.init_scope в код построения функции. Тензор графика имеет имя: density_2 / BiasAdd: 0

Я сделал код доступным в файле Google Collaborative ниже, так что вы можете попробовать запустить его самостоятельно:

https://colab.research.google.com/drive/1ArmP3Nns2T_i-Yt-yDXoudp6Lhnw-ghu?usp=sharing

1 Ответ

1 голос
/ 11 августа 2020

Пользовательский слой, который вы определили для вычисления потерь, т.е. CustomVariationalLayer, обращается к тензорам модели, которые не были переданы ему напрямую. Это запрещено, так как активный режим включен, но функция в слое по умолчанию выполняется в графическом режиме. Чтобы решить эту проблему, вы можете либо полностью отключить активный режим, используя tf.compat.v1.disable_eager_execution(), либо вместо этого использовать tf.config.run_functions_eagerly(True), чтобы все функции работали быстро.

Однако оба вышеперечисленных решения могут быть нежелательными, поскольку они изменение поведения TF по умолчанию (особенно последнего, поскольку это может снизить производительность). Поэтому вместо использования этих решений вы можете изменить определение CustomVariationalLayer, чтобы принимать z_mean и z_log_var в качестве других входных данных:

class CustomVariationalLayer(keras.layers.Layer):
    def vae_loss(self, x, z_decoded, z_mean, z_log_var):
        # ...

    def call(self, inputs):
        x = inputs[0]
        z_decoded = inputs[1]
        z_mean = inputs[2]
        z_log_var = inputs[3]
        loss = self.vae_loss(x, z_decoded, z_mean, z_log_var)
        # ...

y = CustomVariationalLayer()([input_img, z_decoded, z_mean, z_log_var])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...