49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
import tensorflow as tf
|
|
import numpy as np
|
|
|
|
# gpus = tf.config.experimental.list_physical_devices('GPU')
|
|
|
|
# if gpus:
|
|
# try:
|
|
# for gpu in gpus:
|
|
# tf.config.experimental.set_memory_growth(gpu, True)
|
|
# except RuntimeError as e:
|
|
# print(e)
|
|
|
|
|
|
def grad(y, x):
|
|
V = tf.keras.layers.Lambda(lambda z: tf.gradients(
|
|
z[0], z[1]), output_shape=[1])([y, x])
|
|
return V
|
|
|
|
|
|
def grad_cam_test(model, x, some_variable):
|
|
fixed_input = model.inputs
|
|
fixed_output = tf.keras.layers.Lambda(lambda z: tf.keras.backend.gradients(
|
|
z[0], z[1]), output_shape=[2])([model.inputs[0], model.outputs[0]])
|
|
|
|
grad_model = tf.keras.Model(inputs=fixed_input, outputs=fixed_output)
|
|
|
|
return grad_model.predict(x)
|
|
|
|
|
|
def run_test():
|
|
# Generate sample model
|
|
x = tf.keras.Input(shape=(2))
|
|
y = tf.keras.layers.Dense(2)(x)
|
|
model = tf.keras.Model(inputs=x, outputs=y)
|
|
target = np.array([[1.0, 2.0]], dtype=np.float32)
|
|
|
|
# Calculate gradient using numpy array
|
|
input_numpy = np.array([[0.0, 0.0]])
|
|
grad_output_numpy = grad_cam_test(model, input_numpy, target)
|
|
print(f'numpy: {grad_output_numpy}')
|
|
|
|
# Calculate gradient using tf.Variable
|
|
input_variable = tf.constant([[0.0, 0.0]])
|
|
grad_output_variable = grad_cam_test(model, input_variable, target)
|
|
print(f'variable: {grad_output_variable}')
|
|
|
|
|
|
run_test()
|