mau*_*era 8 neural-network python-3.x tensorflow tensorflow2.0
我有一个训练有素的 Tensorflow 2.0 模型(来自 tf.keras.Sequential()),它采用具有 26 列 (X) 的输入层并生成具有 1 列 (Y) 的输出层。
在 TF 1.x 中,我能够计算输出相对于输入的梯度,如下所示:
model = load_model('mymodel.h5')
sess = K.get_session()
grad_func = tf.gradients(model.output, model.input)
gradients = sess.run(grad_func, feed_dict={model.input: X})[0]
Run Code Online (Sandbox Code Playgroud)
在 TF2 中,当我尝试运行 tf.gradients() 时,出现错误:
运行时错误:启用急切执行时不支持 tf.gradients。使用 tf.GradientTape 代替。
在带有急切执行的 TensorFlow 2.0 中,如何计算特定层的网络输出的梯度?,我们看到了关于如何计算关于中间层的梯度的答案,但我不知道如何将其应用于关于输入的梯度。在tf.GradientTape 的 Tensorflow 帮助中,有计算简单函数梯度的示例,但没有计算神经网络的示例。
如何使用tf.GradientTape计算输出相对于输入的梯度?
这应该适用于 TF2:
inp = tf.Variable(np.random.normal(size=(25, 120)), dtype=tf.float32)
with tf.GradientTape() as tape:
preds = model(inp)
grads = tape.gradient(preds, inp)
Run Code Online (Sandbox Code Playgroud)
基本上,您的操作方式与 TF1 相同,但使用GradientTape.