Python Tensorflow Keras梯度带对一个模型的可训练变量返回无,该变量受另一个模型的可训练变量影响

Python Tensorflow Keras梯度带对一个模型的可训练变量返回无,该变量受另一个模型的可训练变量影响,python,tensorflow,keras,Python,Tensorflow,Keras,只要简单的代码就不会生成渐变。 如果我使用其他变量而不是“model_tmp.trainable_variables[0]”(tf.variable b),一切都会正常,我会得到正确的梯度 @tf.function def cat(model, model_tmp): with tf.GradientTape(persistent=True, watch_accessed_variables=False) as g: g.watch(model.trainable_var

只要简单的代码就不会生成渐变。 如果我使用其他变量而不是“model_tmp.trainable_variables[0]”(tf.variable b),一切都会正常,我会得到正确的梯度

@tf.function
def cat(model, model_tmp):
    with tf.GradientTape(persistent=True, watch_accessed_variables=False) as g:
        g.watch(model.trainable_variables[0])
        model_tmp.trainable_variables[0] = tf.multiply(model.trainable_variables[0], 2)        
        a = tf.reduce_mean(model_tmp.trainable_variables[0])
        grads_out = g.gradient(a, model.trainable_variables[0])
        tf.print(grads_out) 
        return grads_out

cat(model, model2)
输出:

None
模型是自定义的Keras模型。 model2是第一个模型的克隆(model2=tf.keras.models.clone\u model(model))
这个问题的可能根源是什么?谢谢

这可能是因为在TensorFlow可以看到模型的可训练变量之前,您必须在模型上执行前进步骤。 应该在g.watch()和g.gradient()函数之间运行前进步骤