嵌套模型时没有提供Keras Tensorflow的渐变

迪弗先生

我开始与Keras合作,但我遇到了这个问题,它告诉我没有提供渐变。我知道这个问题以前曾被发布过100次,但解决方案始终在谈论使用GradientTape,但我不明白为什么要这样做(而且我什至都不知道它的作用)


import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import matplotlib.pyplot as plt

physical_devices = tf.config.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)

class AutoEncoder:

    def create_encoder(self):
        encoder_input = keras.Input(shape=self.input_shape, name="original_img")
        encoder_output = layers.Conv2D(3, 3, activation="relu")(encoder_input)
        encoder = keras.Model(encoder_input, encoder_output)
        return encoder_input, encoder_output, encoder

    def create_decoder(self, eager_execution=False):
        decoder_input = keras.Input(shape=self.encoder_output.type_spec.shape[1:], batch_size=self.batch_size, name="encoded_img")
        decoder_output = layers.Conv2DTranspose(3, 3, activation="relu")(decoder_input)
        decoder = keras.Model(decoder_input, decoder_output)
        return decoder_input, decoder_output, decoder


    def create_autoencoder(self):
        auto_input = keras.Input(shape=self.input_shape, batch_size=self.batch_size, name="AutoEncoder Input")
        encoded = self.encoder(auto_input)
        auto_output = self.decoder(encoded)
        autoencoder = keras.Model(auto_input, auto_output, name="AutoEncoder")
        return auto_input, auto_output, autoencoder

    def __init__(self, input_shape=(256, 256, 3), batch_size=32, eager_execution=False):
        self.input_shape = input_shape
        self.batch_size = batch_size
        self.encoder_input, self.encoder_output, self.encoder = self.create_encoder()
        self.decoder_input, self.decoder_output, self.decoder = self.create_decoder()
        self.autoencoder_input, self.autoencoder_output, self.autoencoder = self.create_autoencoder()
        self.__call__ = self.autoencoder.predict
        self.fit = self.autoencoder.fit
        self.fit_generator = self.autoencoder.fit_generator

        # Compiling models

        self.autoencoder.compile(
            optimizer=keras.optimizers.Adagrad(),
            loss=keras.losses.SparseCategoricalCrossentropy(),
            metrics=keras.metrics.Accuracy(),
            run_eagerly=True,
        )


autoenc = AutoEncoder()
autoenc.autoencoder.fit(train_x)

对于培训,我将Microsoft的一些数据集与PetImages一起使用。但这不应该太重要。

我已经尝试过重新排列所有内容,但是每次调用模型然后使用该模型的输出创建另一个模型时,都会弹出错误消息。

Traceback (most recent call last):
  File "/home/user/PycharmProjects/pythonProject1/main.py", line 148, in <module>
    autoenc.autoencoder.fit(train_x)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1100, in fit
    tmp_logs = self.train_function(iterator)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 805, in train_function
    return step_function(self, iterator)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 795, in step_function
    outputs = model.distribute_strategy.run(run_step, args=(data,))
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py", line 1259, in run
    return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py", line 2730, in call_for_each_replica
    return self._call_for_each_replica(fn, args, kwargs)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py", line 3417, in _call_for_each_replica
    return fn(*args, **kwargs)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/autograph/impl/api.py", line 572, in wrapper
    return func(*args, **kwargs)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 788, in run_step
    outputs = model.train_step(data)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 757, in train_step
    self.optimizer.minimize(loss, self.trainable_variables, tape=tape)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py", line 498, in minimize
    return self.apply_gradients(grads_and_vars, name=name)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py", line 598, in apply_gradients
    grads_and_vars = optimizer_utils.filter_empty_gradients(grads_and_vars)
  File "/home/user/miniconda3/envs/tf/lib/python3.8/site-packages/tensorflow/python/keras/optimizer_v2/utils.py", line 78, in filter_empty_gradients
    raise ValueError("No gradients provided for any variable: %s." %
ValueError: No gradients provided for any variable: ['conv2d/kernel:0', 'conv2d/bias:0', 'conv2d_transpose/kernel:0', 'conv2d_transpose/bias:0'].

Process finished with exit code 1

一切的版本

# Name                    Version                   Build  Channel
tensorflow                2.2.0           gpu_py38hb782248_0  
tensorflow-base           2.2.0           gpu_py38h83e3d50_0  
tensorflow-datasets       4.1.0                    pypi_0    pypi
tensorflow-estimator      2.4.0                    pypi_0    pypi
tensorflow-gpu            2.4.0                    pypi_0    pypi
tensorflow-metadata       0.26.0                   pypi_0    pypi
tensorflow-probability    0.12.0                   pypi_0    pypi
tensorflow-serving-api    2.3.0                    pypi_0    pypi

System 
    Archlinux 
    linux-5.10.3.arch1-1
    cuda-11.2.0-2
    cudnn-8.0.5.39-1

我希望有人对我应该改变以使它起作用的想法。

最好的问候,MrDiver

疯狂的巴西人

我修复了您的代码。当您收到该错误时,损失函数和可训练变量之间的图表中就没有路径,这在您的情况下是正确的。

  1. 您没有标签来训练您的自动编码器。我添加了train_x作为您的标签。
  2. 我认为SparseCategoricalCrossentropy不适用于您定义的体系结构。所以,我将其更改为BinaryCrossEntropy
  3. 为矢量分配名称时,不允许使用空格,因此我将“ AutoEncoder Input”更改为“ AutoEncoder_Input”

这是代码

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator

#physical_devices = tf.config.list_physical_devices('GPU')
#tf.config.experimental.set_memory_growth(physical_devices[0], True)

class AutoEncoder:

    def create_encoder(self):
        encoder_input = keras.Input(shape=self.input_shape, name="original_img")
        encoder_output = layers.Conv2D(3, 3, activation="relu")(encoder_input)
        encoder = keras.Model(encoder_input, encoder_output)
        return encoder_input, encoder_output, encoder

    def create_decoder(self, eager_execution=False):
        decoder_input = keras.Input(shape=self.encoder_output.shape[1:], batch_size=self.batch_size, name="encoded_img")
        decoder_output = layers.Conv2DTranspose(3, 3, activation="relu")(decoder_input)
        decoder = keras.Model(decoder_input, decoder_output)
        return decoder_input, decoder_output, decoder


    def create_autoencoder(self):
        auto_input = keras.Input(shape=self.input_shape, batch_size=self.batch_size, name="AutoEncoder_Input")
        encoded = self.encoder(auto_input)
        auto_output = self.decoder(encoded)
        autoencoder = keras.Model(auto_input, auto_output, name="AutoEncoder")
        return auto_input, auto_output, autoencoder

    def __init__(self, input_shape=(256, 256, 3), batch_size=32, eager_execution=False):
        self.input_shape = input_shape
        self.batch_size = batch_size
        self.encoder_input, self.encoder_output, self.encoder = self.create_encoder()
        self.decoder_input, self.decoder_output, self.decoder = self.create_decoder()
        self.autoencoder_input, self.autoencoder_output, self.autoencoder = self.create_autoencoder()
        self.__call__ = self.autoencoder.predict
        self.fit = self.autoencoder.fit
        self.fit_generator = self.autoencoder.fit_generator

        # Compiling models

        self.autoencoder.compile(
            optimizer=keras.optimizers.Adagrad(),
            loss=keras.losses.BinaryCrossentropy(),
            metrics=keras.metrics.Accuracy(),
            run_eagerly=True,
        )
        



train_x = tf.random.normal(shape=(100,256,256,3),dtype=tf.float32)
autoenc = AutoEncoder()
print(autoenc.autoencoder.summary())
autoenc.autoencoder.fit(train_x,train_x)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ValueError:没有为任何变量提供渐变(Tensorflow)

来自分类Dev

ValueError:没有为任何变量提供渐变-Tensorflow 2.0 / Keras

来自分类Dev

TensorFlow 2自定义丢失:“没有为任何变量提供渐变”错误

来自分类Dev

Python,Tensorflow ValueError:未为任何变量提供渐变

来自分类Dev

TensorFlow:在输入端获取渐变时性能降低

来自分类Dev

使用while_loop时TensorFlow渐变不响应

来自分类Dev

Tensorflow:如何在python中编写带有渐变的op?

来自分类Dev

Keras ValueError:没有为任何变量提供渐变

来自分类Dev

没有为任何变量提供渐变-Keras

来自分类Dev

Tensorflow渐变

来自分类Dev

批量规范化在Tensorflow 2.0中没有渐变吗?

来自分类Dev

从数据集中训练单词嵌入时没有提供渐变

来自分类Dev

没有模型的TensorFlow恢复/部署网络?

来自分类Dev

如何只为Tensorflow子图定义渐变?

来自分类Dev

无法在TensorFlow中为GradientDescentOptimizer收集渐变

来自分类Dev

使用TensorArray Tensorflow的渐变错误

来自分类Dev

为 TensorFlow Serving 导出 textsum 模型时出现错误“str”对象没有属性“dtype”

来自分类Dev

在 TensorFlow Lite 中运行 Keras 模型时的不同预测

来自分类Dev

自举导航没有渐变背景

来自分类Dev

径向渐变背景没有正确过渡

来自分类Dev

我为什么得到“ ValueError:没有为任何变量提供渐变:['Variable:0']。” 错误?

来自分类Dev

ValueError:没有为任何可变自定义损失提供渐变

来自分类Dev

直接使用渐变快速更新keras模型的权重

来自分类Dev

Keras渐变WRT其他

来自分类Dev

Keras自定义图层ValueError:操作没有“ None”用于渐变

来自分类Dev

如何重用嵌套渐变带中的内部渐变?

来自分类Dev

使用 Flask 提供 tensorflow 模型

来自分类Dev

tensorflow/keras 训练模型 keyerror

来自分类Dev

'Tensor' 对象没有属性 '_keras_history' 没有 Tensorflow 张量的 Keras

Related 相关文章

  1. 1

    ValueError:没有为任何变量提供渐变(Tensorflow)

  2. 2

    ValueError:没有为任何变量提供渐变-Tensorflow 2.0 / Keras

  3. 3

    TensorFlow 2自定义丢失:“没有为任何变量提供渐变”错误

  4. 4

    Python,Tensorflow ValueError:未为任何变量提供渐变

  5. 5

    TensorFlow:在输入端获取渐变时性能降低

  6. 6

    使用while_loop时TensorFlow渐变不响应

  7. 7

    Tensorflow:如何在python中编写带有渐变的op?

  8. 8

    Keras ValueError:没有为任何变量提供渐变

  9. 9

    没有为任何变量提供渐变-Keras

  10. 10

    Tensorflow渐变

  11. 11

    批量规范化在Tensorflow 2.0中没有渐变吗?

  12. 12

    从数据集中训练单词嵌入时没有提供渐变

  13. 13

    没有模型的TensorFlow恢复/部署网络?

  14. 14

    如何只为Tensorflow子图定义渐变?

  15. 15

    无法在TensorFlow中为GradientDescentOptimizer收集渐变

  16. 16

    使用TensorArray Tensorflow的渐变错误

  17. 17

    为 TensorFlow Serving 导出 textsum 模型时出现错误“str”对象没有属性“dtype”

  18. 18

    在 TensorFlow Lite 中运行 Keras 模型时的不同预测

  19. 19

    自举导航没有渐变背景

  20. 20

    径向渐变背景没有正确过渡

  21. 21

    我为什么得到“ ValueError:没有为任何变量提供渐变:['Variable:0']。” 错误?

  22. 22

    ValueError:没有为任何可变自定义损失提供渐变

  23. 23

    直接使用渐变快速更新keras模型的权重

  24. 24

    Keras渐变WRT其他

  25. 25

    Keras自定义图层ValueError:操作没有“ None”用于渐变

  26. 26

    如何重用嵌套渐变带中的内部渐变?

  27. 27

    使用 Flask 提供 tensorflow 模型

  28. 28

    tensorflow/keras 训练模型 keyerror

  29. 29

    'Tensor' 对象没有属性 '_keras_history' 没有 Tensorflow 张量的 Keras

热门标签

归档