预训练的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)