繁体   English   中英

Tensorflow Keras 对于一个 model 的可训练变量受其他 Z49DDB8F35E630FCC3 的可训练变量影响,渐变磁带返回 None

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM