When I try to define a layer by myself and use the add_weight() function to declare the trainable return propagation variable，Threw an error：

ValueError: Variable <tf.Variable ‘eqn1_1/constant1:0’ shape=(1,) dtype=float32> has None for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.

My code is as follows：

class WbceLoss(KL.Layer):
def __init__(self, **kwargs):
    super(WbceLoss, self).__init__(**kwargs)
    
def build(self, input_shape):
    self.constant1 = self.add_weight(name = "constant1", shape=[1], initializer='random_normal', trainable=True)
    self.constant2 = self.add_weight(name = "constant2", shape=[1], initializer='random_normal', trainable=True)

def call(self, inputs, **kwargs):
    
    tf.compat.v1.disable_eager_execution()
    out1, out2, out3, cur_time, cur_x_input, cur_y_input, cur_z_input, perm_input = inputs

    x_input = cur_x_input
    y_input = cur_y_input
    z_input = cur_z_input
    perm_input = perm_input
    
    constant1 = self.constant1
    constant2 = self.constant2
    print(constant1)
    print(constant2)

    gradient_with_time = tf.keras.backend.gradients(out1, cur_time)[0]
    constant1 = tf.convert_to_tensor(constant1)
    constant2 = tf.convert_to_tensor(constant2)
    a = tf.zeros((1,), dtype=tf.float32)
    bias = tf.convert_to_tensor([a, a, constant1])
    #bias = tf.expand_dims([0., 0., constant1], 0)
    bias = tf.expand_dims(bias, 2)

    pressure_grad_x = tf.keras.backend.gradients(out2, cur_x_input)[0]
    pressure_grad_y = tf.keras.backend.gradients(out2, cur_y_input)[0]
    pressure_grad_z = tf.keras.backend.gradients(out2, cur_z_input)[0]
    
    pressure_grad = tf.convert_to_tensor([pressure_grad_x, pressure_grad_y, pressure_grad_z])
    pressure_grad = tf.keras.backend.permute_dimensions(
    pressure_grad, (1, 0, 2))
    coeff = (1 - out1) / constant2

    m = tf.matmul(perm_input, (pressure_grad - bias))
    m_grad_x = tf.keras.backend.gradients(m, cur_x_input)[0]
    m_grad_y = tf.keras.backend.gradients(m, cur_y_input)[0]
    m_grad_z = tf.keras.backend.gradients(m, cur_z_input)[0]
    m_grad_1 = tf.add(m_grad_x, m_grad_y)
    m_grad = tf.add(m_grad_1, m_grad_z)

    m_final = tf.multiply(coeff, m_grad)
    eqn_1 = tf.add(gradient_with_time, m_final)
    eqn_2 = tf.add(eqn_1, out3)
    eqn = tf.negative(eqn_2)
    
    eqn = tf.compat.v1.to_float(eqn)
    
    self.add_loss(eqn, inputs=True)
    self.add_metric(eqn, aggregation="mean", name="eqn1")

    return eqn


The whole error when I train the model is as follows：

ValueError                                Traceback (most recent call last)
 in ()
12                     batch_size=241,
13                     shuffle=True,
—> 14                     verbose=1)
~\AppData\Roaming\Python\Python36\site-packages\keras\engine\training_v1.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
794         max_queue_size=max_queue_size,
795         workers=workers,
 → 796         use_multiprocessing=use_multiprocessing)
797
798   def evaluate(self,
~\AppData\Roaming\Python\Python36\site-packages\keras\engine\training_arrays_v1.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, **kwargs)
655         validation_steps=validation_steps,
656         validation_freq=validation_freq,
 → 657         steps_name=‘steps_per_epoch’)
658
659   def evaluate(self,
~\AppData\Roaming\Python\Python36\site-packages\keras\engine\training_arrays_v1.py in model_iteration(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq, mode, validation_in_fit, prepared_feed_values_from_dataset, steps_name, **kwargs)
175   # function we recompile the metrics based on the updated
176   # sample_weight_mode value.
 → 177   f = _make_execution_function(model, mode)
178
179   # Prepare validation data. Hold references to the iterator and the input list
~\AppData\Roaming\Python\Python36\site-packages\keras\engine\training_arrays_v1.py in _make_execution_function(model, mode)
545   if model._distribution_strategy:
546     return distributed_training_utils_v1._make_execution_function(model, mode)
 → 547   return model._make_execution_function(mode)
548
549
~\AppData\Roaming\Python\Python36\site-packages\keras\engine\training_v1.py in _make_execution_function(self, mode)
2077   def _make_execution_function(self, mode):
2078     if mode == ModeKeys.TRAIN:
 → 2079       self._make_train_function()
2080       return self.train_function
2081     if mode == ModeKeys.TEST:
~\AppData\Roaming\Python\Python36\site-packages\keras\engine\training_v1.py in _make_train_function(self)
2009           # Training updates
2010           updates = self.optimizer.get_updates(
 → 2011               params=self._collected_trainable_weights, loss=self.total_loss)
2012           # Unconditional updates
2013           updates += self.get_updates_for(None)
~\AppData\Roaming\Python\Python36\site-packages\keras\optimizer_v2\optimizer_v2.py in get_updates(self, loss, params)
757
758   def get_updates(self, loss, params):
 → 759     grads = self.get_gradients(loss, params)
760     grads_and_vars = list(zip(grads, params))
761     self._assert_valid_dtypes([
~\AppData\Roaming\Python\Python36\site-packages\keras\optimizer_v2\optimizer_v2.py in get_gradients(self, loss, params)
753                            "gradient defined (i.e. are differentiable). "
754                            "Common ops without gradient: "
 → 755                            “K.argmax, K.round, K.eval.”.format(param))
756     return grads
757
ValueError: Variable <tf.Variable ‘eqn1_1/constant1:0’ shape=(1,) dtype=float32> has None for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.

Hope someone can help me！！！