Tensorflow TF2.0在训练循环期间损失等于零

Tensorflow TF2.0在训练循环期间损失等于零,tensorflow,keras,tensorflow2.0,autoencoder,loss,Tensorflow,Keras,Tensorflow2.0,Autoencoder,Loss,我的损失有问题。当我在一个步骤内计算它时,它是有效的,但当我试图在训练循环中最小化它时,它就不能了。 我不明白为什么函数不是最小化的,而是等于零: 我的损失 我的列车功能: def train_step(model, x, optimizer): with tf.GradientTape() as tape: loss = compute_loss(model, x) gradients = tape.gradient(loss, model.trainable_variabl

我的损失有问题。当我在一个步骤内计算它时,它是有效的,但当我试图在训练循环中最小化它时,它就不能了。 我不明白为什么函数不是最小化的,而是等于零: 我的损失

我的列车功能:

def train_step(model, x, optimizer):

  with tf.GradientTape() as tape:
    loss = compute_loss(model, x)
  gradients = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))
我的网络课:

class CVAE(tf.keras.Model):
    def __init__(self, latent_dim):
  
        super(CVAE, self).__init__()
        self.latent_dim = latent_dim
        self.initializer = tf.keras.initializers.LecunNormal()
        self.regularizer =tf.keras.regularizers.L1L2(l1=0.01, l2=0.01)  # L1 + L2 penalties
        self.encoder = tf.keras.Sequential(
                [
                        tfkl.InputLayer(input_shape=(321,)),
                        tfkl.Dense(512,activation="relu",activity_regularizer=self.regularizer ,kernel_initializer =self.initializer ),
                        tfkl.Dense(latent_dim + latent_dim,activation="relu",activity_regularizer=self.regularizer,kernel_initializer =self.initializer,),
                ]
        )

        self.decoder = tf.keras.Sequential(
                [
                        tfkl.Dense(512,activation="relu",activity_regularizer=self.regularizer,kernel_initializer =self.initializer),
                        tfkl.Dense(321,activation="sigmoid")]

        )

    def sample(self,x, eps=None):
      mean ,encoded_logvar = self.encode(x)
      encoder_std = tf.exp(0.5 * encoder_logvar)

      if eps is None:
        eps = tf.random.normal(tf.shape(encoder_std))
      return self.decode(eps, apply_sigmoid=True)

    def encode(self, x):
        mean, logvar = tf.split(self.encoder(x), num_or_size_splits=2, axis=1)
        return mean, logvar

    def reparameterize(self, mean, logvar):
        eps = tf.random.normal(shape=mean.shape) ## The distribution represents also a hyperparameter to optimize
        return eps * logvar + mean

    def decode(self, z, apply_sigmoid=False):
      logits = self.decoder(z)
      if apply_sigmoid:
        probs = tf.sigmoid(logits)
        return probs
      return logits
以下是我手动计算损失时的结果:


latent_dim = 3 # set the dimensionality of the latent space  ,important for the embed function

model = CVAE(latent_dim)

loss = compute_loss(model,data)

loss

结果:

<tf.Tensor: shape=(), dtype=float32, numpy=233.07153>

有什么解决办法吗

<tf.Tensor: shape=(), dtype=float32, numpy=233.07153>