使用tf.gradienttape计算多个输入的梯度wrt,但不返回



预训练的DNN模型有两个输入,我想计算两个输入的输出梯度

ta = tf.cast(input1,tf.float32) #ta in 2 dimension, tb in 3 dimension
tb = tf.cast(input2,tf.float32)
inp_tensor_list = [ta,tb]
with tf.GradientTape() as tape:
pred = model(inp_tensor_list)  #pred return correct value here
grad = tape.gradient(pred, inp_tensor_list)

grad[无,无]

如何修复?感谢

已解决的更新

使用tf.Variable而不是tf.cast

您需要像下面的一样将变量传递给tape.gradient调用

grad = tape.gradient(pred, model.trainable_variables)

编辑:

如果你想计算张量的梯度wrt,你需要明确要求磁带跟踪对所述张量的操作。

ta = tf.cast(input1,tf.float32) #ta in 2 dimension, tb in 3 dimension
tb = tf.cast(input2,tf.float32)
inp_tensor_list = [ta,tb]
with tf.GradientTape() as tape:
tape.watch(ta) 
tape.watch(tb)
pred = model(inp_tensor_list)  #pred return correct value here
grad = tape.gradient(pred, inp_tensor_list)

相关内容

  • 没有找到相关文章

最新更新