【发布时间】:2020-03-27 10:30:35
【问题描述】:
我有一个训练有素的 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]
在 TF2 中,当我尝试运行 tf.gradients() 时,出现错误:
RuntimeError: 启用急切执行时不支持 tf.gradients。请改用 tf.GradientTape。
在问题In TensorFlow 2.0 with eager-execution, how to compute the gradients of a network output wrt a specific layer? 中,我们看到了关于如何计算相对于中间层的梯度的答案,但我看不到如何将其应用于相对于输入的梯度。在 tf.GradientTape 的 Tensorflow help 上,有计算简单函数梯度的示例,但不包括神经网络。
如何使用 tf.GradientTape 计算输出相对于输入的梯度?
【问题讨论】:
-
@LongNguyen - 不,它没有。我已经在我的问题中链接到该答案,并解释了为什么它没有回答。
-
这应该可以回答您的问题。但这是一个非常简单的功能。但是,cmets 应该指导您如何将其适应神经网络。如果您仍然有问题,请告诉我,以便我可以根据您的问题编辑答案。 stackoverflow.com/questions/35226428/…
-
@thushv89 - 感谢您的链接。我已经浏览了那个例子,但没有成功地尝试使它适应我的问题。我试过: tf.GradientTape() as tape: preds = model(model.input) dy_dx = tape.gradient(preds,tf.convert_to_tensor(X)) 但这给出了错误:“tensorflow.python.framework. errors_impl.InvalidArgumentError:尺寸必须相等,但对于输入形状为 [2]、[0] 的“Equal_1”(操作:“Equal”),尺寸必须为 2 和 0。”
-
我会看看并在这里发布答案
标签: python-3.x tensorflow neural-network tensorflow2.0