在具有急切执行的TensorFlow 2.0中,如何计算网络输出wrt输入层的梯度?
我使用网络接收v3,我想计算模型输出w.r.t.输入层的梯度。我有以下代码:在具有急切执行的TensorFlow 2.0中,如何计算网络输出wrt输入层的梯度?,tensorflow,keras,gradient,tensorflow2.0,Tensorflow,Keras,Gradient,Tensorflow2.0,我使用网络接收v3,我想计算模型输出w.r.t.输入层的梯度。我有以下代码: origin_image = load_img("dog.jpg", target_size=(299, 299)) origin_image = img_to_array(origin_image) origin_image = (origin_image - 127.5) / 127.5 origin_image = np.expand_dims(origin_image, axis=0) model = ten
origin_image = load_img("dog.jpg", target_size=(299, 299))
origin_image = img_to_array(origin_image)
origin_image = (origin_image - 127.5) / 127.5
origin_image = np.expand_dims(origin_image, axis=0)
model = tensorflow.keras.applications.inception_v3.InceptionV3()
with tf.GradientTape() as gtape:
output = model(origin_image)
y_pred = output[0, 346]
gradient = gtape.gradient(y_pred, model.get_layer("input_1").trainable_variables)
print(gradient) # return []
但这段代码正在运行:
from keras import backend as K
model_input_layer = model.layers[0].input
model_output_layer = model.layers[-1].output
cost_function = model_output_layer[0, 346]
gradient_function = K.gradients(cost_function, model_input_layer)
grab_cost_and_gradients_from_model = K.function([model_input_layer, K.learning_phase()],
[cost_function, gradient_function])
cost, gradients = grab_cost_and_gradients_from_model([origin_image, 0])
如何使用tf.GradientTape计算输出相对于输入的梯度您可以通过此处提供的解决方案在TF2中执行此操作: 别忘了根据您拥有的输入列的数量,在size=(25120)中更改输入形状。 model(input)和model.predict(input)的作用不一样,predict使用numpy数组,而model(input)执行tensorflow可以区分的符号计算 但仔细查看您的代码,看起来您正试图在特定的层上执行此操作。至此,您可以参考以下链接:
这可能会有所帮助。您可以通过此处提供的解决方案在TF2中执行此操作: 别忘了根据您拥有的输入列的数量,在size=(25120)中更改输入形状。 model(input)和model.predict(input)的作用不一样,predict使用numpy数组,而model(input)执行tensorflow可以区分的符号计算 但仔细查看您的代码,看起来您正试图在特定的层上执行此操作。至此,您可以参考以下链接: 这可能会有所帮助
input = tf.Variable(np.random.normal(size=(25, 120)), dtype=tf.float32)
with tf.GradientTape() as tape:
preds = model(inp)
grads = tape.gradient(preds, input)