Python Tensorflow Keras梯度带对一个模型的可训练变量返回无,该变量受另一个模型的可训练变量影响
只要简单的代码就不会生成渐变。 如果我使用其他变量而不是“model_tmp.trainable_variables[0]”(tf.variable b),一切都会正常,我会得到正确的梯度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
@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()函数之间运行前进步骤