我试图计算我的模型相对于其输入的损失的梯度,以便创建一个对抗性的例子。由于模型的输入是不可训练的,我需要计算相对于张量的梯度,而不是变量。但是,我发现如果张量不是可训练变量,TensorFlow的GradientTape
返回{
import numpy as np
import tensorflow as tf
tf.enable_eager_execution()
a = tf.convert_to_tensor(np.array([1., 2., 3.]), dtype=tf.float32)
b = tf.constant([1., 2., 3.])
c = tf.Variable([1., 2., 3.], trainable=False)
d = tf.Variable([1., 2., 3.], trainable=True)
with tf.GradientTape() as tape:
result = a + b + c + d
grads = tape.gradient(result, [a, b, c, d])
print(grads)
打印:
我浏览了张量流的Eager Execution tutorial和Eager Execution guide,但找不到计算梯度w.r.t.a张量的解。在
^{} 文档揭示了一个简单的解决方案:
在这种情况下
将导致
^{pr2}$print(grads)
:相关问题 更多 >
编程相关推荐