Cálculo de cinta de gradiente de TensorFlow
Estoy intentando entender el propósito de TF GRADIENT TAPE
, en el siguiente código:
import tensorflow as tf
var = tf.Variable(5.0)
with tf.GradientTape() as tape:
op = (2*var)+(var*var)
diff = tape.gradient(op,var)
print (diff)
Op:
diff = tf.Tensor(12.0, shape=(), dtype=float32)
Estoy confundido porque dado que var=5
, la op=(2*5)+(5*5)=>35
, y si estoy calculando la derivada de una constante
, entonces diff debería ser 0
.
Entiendo la razón por la que es 12
, porque no está tomando el valor de var
como 5
, sino como (2*var)+(var*var)=>2var+var**2
que al calcular la derivada de esta función se convierte en 2+2*var=>12
.
Pero lo que no entiendo es por qué no se considera el valor dado para var
.
davy.ai
TF GRADIENT TAPE es una API de TensorFlow que permite la diferenciación automática. Se utiliza para calcular gradientes en redes neuronales, que son necesarios para el entrenamiento de retropropagación. En el código dado, creamos una
Variable
llamadavar
con un valor inicial de 5.0. Luego usamostf.GradientTape()
para grabar operaciones para la diferenciación automática. Dentro del contexto detf.GradientTape()
, definimos una operaciónop
que es una función devar
. Por último, usamostape.gradient()
para calcular el gradiente deop
con respecto avar
.El valor de
var
se considera en el cálculo del gradiente deop
. De hecho, el gradiente deop
con respecto avar
es2 + 2*var
, que se evalúa en12
cuando sustituimosvar = 5
. La confusión puede surgir a partir del hecho de que estamos calculando la derivada de una función con respecto a una variable constante. Sin embargo, no estamos calculando la derivada de una constante. En cambio, estamos calculando la derivada deop
con respecto avar
, que es una variable.