如果我在Keras中有一个网络,其中有一些输入变量,例如x,y,z。我将如何计算相对于每个输入(x,y,z)的输出的梯度。我一直在环顾四周,找不到一个明确的答案,并且在与tf.gradients纠缠了一段时间之后,自己也没有设法解决。 我已经看到了这个问题Keras with TF backend: get gradient of outputs with respect to inputs 但这对我来说根本不清楚,我也不知道该怎么做或如何实现它。谢谢任何帮助和简单的例子。
编辑:
这里是我正在寻找的具体示例。 考虑例如函数f(x,y,z)= x ^ 2 + y ^ 2 + z ^ 2。
def function(x,y,z):
return (x**2) + (y**2) + (z**2)
network = Sequential()
network.add(Dense(128, input_shape=3, activation='relu'))
network.add(Dense(128, activation='relu'))
network.add(Dense(1,activation='relu'))
如果我在x,y,z和函数值f(x,y,z)的随机示例上训练神经网络并近似函数f(x,y,z),我想做的是然后使用网络分别返回函数相对于每个输入的梯度。此示例的梯度矢量将由下式给出 f'(x,y,z)= 2x + 2y + 2z。因此,一旦训练了网络,对于给定的输入向量(x,y,z),我不仅要近似于函数值,还希望相对于输入近似求导,例如,一旦训练了网络,如果i假设网络输入向量(1,2,3),我不仅想获得f(1,2,3)= 1 ^ 2 + 2 ^ 2 + 3 ^ 2 = 14的网络近似值,但是我想分别针对每个个体获得f(x,y,z)的导数的近似值,因此在这种情况下,我想近似f(x,y,z)的偏导数相对于x = 1,当然是2,同样对于f(x,y,z)相对于其他两个输入的偏导数,分别为4和6。这只是我想做的一个简单例子。