![](/img/trans.png)
[英]Empty trainable variable in keras model(keras version = 2.2.4-tf)
[英]Tensorflow Keras Gradient Tape returns None for a trainable variable of one model which is impacted by trainable variable of other model
只需简单的代码即可生成无渐变。 如果我使用其他变量而不是“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)
output:
None
model 是定制的 Keras model。 model2 是第一个 model 的克隆(model2 = tf.keras.models.clone_model(model)) 这个问题的可能根源是什么? 谢谢
这可能是因为在 TensorFlow 可以看到 model 的可训练变量之前,您必须在 model 上执行前进步骤。 您应该在 g.watch() 和 g.gradient() 函数之间运行正向步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.