【问题标题】:Tensorflow Keras Gradient Tape returns None for a trainable variable of one model which is impacted by trainable variable of other modelTensorflow Keras Gradient Tape 为一个模型的可训练变量返回无,该模型受其他模型的可训练变量影响
【发布时间】:2021-03-26 18:27:15
【问题描述】:

只需简单的代码即可生成无渐变。 如果我使用其他变量而不是“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

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

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2020-12-18
      • 2020-01-03
      相关资源
      最近更新 更多